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


CCC123
CCC123 2023-11-28 12:01:57 48513
分类专栏: 资讯

先了解下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 <stdio.h>
//#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;
}

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

图片

#error 测试代码:

#include <stdio.h>
//#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;
}

 

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

图片

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

图片

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

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

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=29068
赞同 0
评论 0 条
CCC123L0
粉丝 0 发表 6 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2956
【软件正版化】软件正版化工作要点  2875
统信UOS试玩黑神话:悟空  2839
信刻光盘安全隔离与信息交换系统  2733
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1267
grub引导程序无法找到指定设备和分区  1231
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  165
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  163
点击报名 | 京东2025校招进校行程预告  163
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  159
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
如何玩转信创开放社区—从小白进阶到专家 15
信创开放社区邀请他人注册的具体步骤如下 15
方德桌面操作系统 14
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
我有15积分有什么用? 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!