先了解下gcc的编译过程,如下:
预处理 -> 编译 -> 汇编 -> 链接
gcc 的编译流程可以分成四个步骤:
1.预处理(-E),生成预编译文件(.i文件)
2.编译(-S),生成汇编代码(.S 文件)
3.汇编(-c),生成目标文件(.o 文件)
4.链接(-o),生成可执行文件
-E :只对文件进行预处理,不编译和链接。(生成预编译文件.i)
使用 gcc -E hello.c -o hello.i 得到预处理后的文件
编译,把文件编译成汇编代码(生成汇编文件.s)
-S 参数 将 hello.i 文件编译成 hello.s 文件
gcc -S hello.i -o hello.s
汇编,把汇编文件编译机器码(生成目标文件.o)
-c 参数 可以把 hello.s 文件编译成 hello.o 文件
gcc -c hello.s -o hello.o
链接
直接把目标文件编译成可执行文件
gcc hello.o -o hello
C语言中#error是C语言中的一个预处理指令,用于在编译时输出错误信息并停止编译。当编译器遇到#error指令时,会输出指定的错误信息,并停止编译。这个指令通常用于在编译时检查代码中的错误或者警告信息。
在C语言中,#warning用于自定义一条编译警告信息。当条件为真时,编译器会输出这条警告信息。不同于#error,#warning无论是否输出警告信息,程序都会正常编译和运行。、
一般用法:
#warning 测试代码:
//#define DEBUG
int main()
{
//#ifndef DEBUG
//#error "DEBUG is not defined!"
//#endif
printf("Debugging information:\n");
printf("Hello, World!\n");
return 0;
}
在预处理阶段会给出警告,但是仍然可以生成可执行文件,并正常执行。
#error 测试代码:
//#define DEBUG
int main()
{
// #ifndef DEBUG
// #warning "DEBUG is not defined!"
// #endif
printf("Debugging information:\n");
printf("Hello, World!\n");
return 0;
}
删除掉刚才生成的可执行文件,重新编译,如下:
程序给出错误,并终止了编译。可以看到执行文件并未生成。
除此外,常用的预处理指令还有:
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!