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,编译,命令,代码,C语言,source,预处理 From: https://blog.csdn.net/2302_77901571/article/details/145232707
-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
。