首页 > 其他分享 >C语言-预处理命令

C语言-预处理命令

时间:2025-01-18 21:57:35浏览次数:3  
标签:文件 gcc 编译 命令 代码 C语言 source 预处理

1、预处理命令是以 # 开头的指令

        用于在编译前对源代码进行一些处理

2、与#号相关的代码

        1、#include

                用于在源代码中引入其他文件。可以引入标准库的头文件,也可以引入自定义的头

                文件。

// 引入标准输入输出头文件,到系统路径找stdio.h头文件

#include <stdio.h>  

 引入自定义头文件,到当前目录找myheader.h头文件。如果找不到,再到系统路径找
 
#include "myheader.h"  
        2、#define

                用于定义宏,可以定义常量、表达式或代码段。在预处理阶段,所有的宏都会被展开。

                1、不带参宏

                        #define  N   M + M

                        注意:

                                宏只是代码的替换,中间不会有任何数据计算的操作

                                宏定义使用时,能加括号就加括号。

                2、带参数宏

                        

#define MAXNUM(x, y)  ((x) > (y)) ? ((x) : (y))

                        带参宏与函数的区别:

                                1、带参宏只是代码的替换,没有函数调用,传参,返回的过程,执行效率高

                                2、带参宏没有参数类型、返回值类型的概念

                                3、代参宏会让代码体积变大

                                4、函数时程序运行时加载到程序中,带参宏时程序编译时加载到程序中

                                5、函数的调用,传参,返回的过程,资源开销大

                                6、模块化代码简短使用带参宏

                3、#undef

                        用于取消之前定义的宏,使其在后续代码中无效。

#define MAX_SIZE 100
#undef MAX_SIZE  // 取消 MAX_SIZE 宏定义
                4、条件编译

        #if根据条件编译代码块

        #ifdef如果宏已定义,则编译代码块

        #ifndef如果宏未定义,则编译代码块

        #else:用于与 #if#ifdef#ifndef 配合使用,指定条件不成立时编译的

                             代码

        #elif:用于在 #if 或 #ifdef 后添加多个条件

#define DEBUG

#ifdef DEBUG
  printf("Debugging enabled\n");
#else
  printf("Debugging disabled\n");
#endif

3、gcc的四个编译步骤

        

        1、预处理阶段:处理所有以 # 开头的预处理指令处理宏定义、文件包含、条件编译等,生

                                   成预处理后的代码文件(.i)。

        2、编译阶段:将预处理后的代码转换为汇编语言(.s)。

        3、汇编阶段:将汇编代码转换为目标文件(.o)。

        4、链接阶段:将目标文件与库文件链接,生成最终的可执行文件(如 a.out)。

4、gcc的编译选项

-gcc source.c -o output
        编译 source.c 文件并生成可执行文件 output

-c
        仅编译源代码文件,而不进行链接,生成目标文件(.o)。
        例如:gcc -c source.c 生成 source.o

-o <file>
        指定输出文件的名称。
        例如:gcc source.c -o program

-E
        仅预处理源文件,生成预处理结果(即展开宏和包含文件)。输出是一个 .i 文件。
        例如:gcc -E source.c

-S
        仅汇编源代码,生成汇编代码文件(.s)。
        例如:gcc -S source.c

-x <language>
        指定输入文件的语言类型。
        例如:gcc -x c++ source.cpp

-l<library>
        链接指定的库。
        例如:gcc source.c -o program -lm,表示链接 libm 数学库。

-I<dir>
        添加头文件搜索路径。
        例如:gcc -I/usr/local/include source.c

-Wall
        启用大多数常见的编译器警告,帮助检测潜在问题。
        例如:gcc -Wall source.c

标签:文件,gcc,编译,命令,代码,C语言,source,预处理
From: https://blog.csdn.net/2302_77901571/article/details/145232707

相关文章

  • C语言 - 函数
    1、作用    1、可以让程序模块化    2、可以减少重复代码    3、提高程序的可读性、可维护性和重用性2、函数的三个部分    1、函数的定义        函数类型函数名(数据类型1形参1,数据类型2形参2,...)     ......
  • 在C语言中实现封装、继承和多态
    在C语言中,没有直接的支持封装、继承和多态等面向对象特性。C语言是结构化编程语言,通常通过函数和数据结构(结构体)来实现类似的功能。我们可以通过结构体、函数指针、和手动管理的对象生命周期来模拟C++中的面向对象的特性。下面我们将逐一讨论如何在C语言中实现封装、继承和多......
  • C语言知识点
    前言这篇博客并不是我个人所写,是我在网络上无意间看到了markdown版本,我觉得很不错,为了方便我当助班时带的学弟学妹通过我的博客学习C语言,我把这篇文章放在了我的博客里面,便于他们学习。如有侵权,请联系我删除。目录前言第1章程序设计和C语言C语言的发展及其特点结构化......
  • [20250118]find命令文件统配符使用引号.txt
    [20250118]find命令文件统配符使用引号.txt--//网上看到的问题,实际上问题许多人包括我自己也经常会犯类似的错误。因为如果没有引号,bashshell会展开解释。--//通过一个简单例子说明问题:$mkdir202501$cd202501$toucha1.txt$toucha2.txt$echo*.txta1.txta2.txt$echo*......
  • 嵌入式基础 C语言篇 数组.初阶
    一、基本概念逻辑:一次性定义多个相同类型的变量,并存储到一片连续的内存中语法释义:intbuf[5];buf是数组名,即这片连续内存的名称[5]代表这片连续内存总共分成5个相等的格子,每个格子称为数组的元素int代表每个元素的类型,可以是任意基本类型,也可以是组合类型,甚至可以是数组初......
  • 嵌入式基础 C语言篇 指针初阶
    一、指针的入门(1)、预备知识0、图解:1、内存地址字节:字节是内存的容量单位,英文称为byte,一个字节有8位,即1byte(00000000---11111111)=8bits(0---1)地址:系统为了便于区分每一个字节而对它们逐一进行的编号,称为内存地址,简称地址。在32位系统:说明:地址+1就是......
  • 嵌入式基础 C语言篇 错题
    (1) 若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是________。A.1     B.2    C.2.0    D.2.53/2=1;y=2.0(2)简述i++和++i    i++是先使用i的值,再i+1;++i是先i+1,再使用i的值底层原理:1、i++和++i都是带有返回值的函数2......
  • manage-bde 是一个用于管理 BitLocker 驱动器加密的命令行工具,广泛应用于 Windows 操
    manage-bde|MicrosoftLearn manage-bde命令按功能进行分类,并以表格形式呈现的结果:功能分类命令描述基本命令manage-bde启动 manage-bde 命令行工具,显示相关帮助信息。查看加密状态manage-bdestatus显示所有驱动器的BitLocker加密状态,包括是否启用、......
  • 第1讲:C语言常见概念
    目录1.C语言是什么?2.C语言的历史和辉煌3.编译器的选择VS20224.VS项目和源文件、头文件介绍5.第一个C语言程序6.main函数7.printf和库函数8.关键字介绍9.字符和ASCII编码10.字符串和\011.转义字符12.语句和语句分类13.注释是什么?为什么写注释?正文开始1.C语言......
  • 第2讲:C语言数据类型和变量
    目录1.数据类型介绍2.signed和unsigned3.数据类型的取值范围4.变量5.算术操作符:+、-、*、/、%6.赋值操作符:=和复合赋值7.单目操作符:++、--、+、-8.强制类型转换9.scanf和printf介绍正文开始1.数据类型介绍C语言提供了丰富的数据类型来描述生活中的各种数......