C语言中#error和#warning的使用

先了解下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语言中#errorC语言中的一个预处理指令,用于在编译时输出错误信息并停止编译。当编译器遇到#error指令时,会输出指定的错误信息,并停止编译。这个指令通常用于在编译时检查代码中的错误或者警告信息。

在C语言中,#warning用于自定义一条编译警告信息。当条件为真时,编译器会输出这条警告信息。不同于#error,#warning无论是否输出警告信息,程序都会正常编译和运行。、

一般用法:

#error message
#warning message

#warning 测试代码:

#include 
//#define DEBUG
int main()
{
    //#ifndef DEBUG
    //#error "DEBUG is not defined!"
    //#endif
    #ifndef DEBUG
    #warning "DEBUG is not defined!"
    #endif
    #ifdef DEBUG
    printf("Debugging information:\n");
    #endif
    printf("Hello, World!\n");
    return 0;
}

在预处理阶段会给出警告,但是仍然可以生成可执行文件,并正常执行。

C语言中#error和#warning的使用_第1张图片

#error 测试代码:

#include 
//#define DEBUG
int main()
{
    #ifndef DEBUG
    #error "DEBUG is not defined!"
    #endif
    // #ifndef DEBUG
    // #warning "DEBUG is not defined!"
    // #endif
    #ifdef DEBUG
    printf("Debugging information:\n");
    #endif
    printf("Hello, World!\n");
    return 0;
}

删除掉刚才生成的可执行文件,重新编译,如下:

C语言中#error和#warning的使用_第2张图片

程序给出错误,并终止了编译。可以看到执行文件并未生成。

C语言中#error和#warning的使用_第3张图片

除此外,常用的预处理指令还有:

#include:用于包含头文件,将头文件中的内容插入到当前文件中。
#define:用于定义宏,可以将一些常量或者函数简化为一个宏,方便代码的编写和维护。
#ifdef、#ifndef、#endif:用于条件编译,根据条件判断是否编译某段代码。
#pragma:用于向编译器发出特定的指令和动作,如优化选项等。

欢迎关注公众号:嵌入式学习与实践

你可能感兴趣的:(c语言,开发语言)