Daily-C-Study(18):C语言#error预处理

Daily-C-Study(18):C语言#error预处理

成于坚持,败于止步

#error 预处理指令的作用是,编译程序时,只要遇到#error 就会生成一个编译错误提示消息,并停止编译。其语法格式为:

#error error-message
注意,宏串error-message 不用双引号包围。遇到#error 指令时,错误信息被显示,可能同时还显示编译程序作者预先定义的其他内容。

该预处理将产生一条编译时错误信息,信息中包含#error后指定的内容。

C语言标准中,要求对于#error后面的指定的内容也进行宏展开,但在我测试后发现Visual Studio 2008并没有对这一特性提供支持。所以,在我们的程序中,应尽量避免出现不同编译器实现可能各不相同的标准特性。

该预处理器指令看似无用,因为一旦遇到它,程序的编译过程就会出错,无法完成编译。那么它应该用在什么场合呢?

大家想必对”断言“早有耳闻。在程序运行时,一旦遇到断言不成立,程序即会报错终止,以方便程序调试。#error与#if搭配使用可以认为是一个用于调试宏的编译期断言。

下面看一个例子说明#error的典型应用实例:

#include “stdio.h”
int main(int argc, char* argv[])
{
#define CONST_NAME1 “CONST_NAME1”
printf("%s\n",CONST_NAME1);
#undef CONST_NAME1

#ifndef CONST_NAME1
#error No defined Constant Symbol CONST_NAME1
#endif

#define CONST_NAME2 “CONST_NAME2”
printf("%s\n",CONST_NAME2);
printf("%s\n",CONST_NAME2);
return 0;
}
在编译的时候输出如编译信息 :
 fatal error C1189: #error : No defined Constant Symbol CONST_NAME1

上面的代码会引发一个#error错误。综上,对含有复杂逻辑的宏代码使用#error是一个很好用的技巧。它确保了程序在关键点上确实按照程序员的想法被预处理,否则便无法编译通过。而且,重要的是:编译期行为不会引起任何运行期的资源开销。

就先到这里,O(∩_∩)O~

我的专栏地址:http://blog.csdn.net/column/details/c-daily-study.html

待续。。。。。。

作者:Ela–学海无涯
来源:CSDN
原文:https://blog.csdn.net/xinyuwuxian/article/details/9033367
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/wang2425559/article/details/89514227