C语言进阶--#error和#line分析
Posted 袁帅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言进阶--#error和#line分析相关的知识,希望对你有一定的参考价值。
#error用于生成一个编译错误消息
用法:#error message
--message不需要用双引号包围
#error编译指示符用于自定义程序员特有的编译错误消息,#error是一种预编译器指示符,可用于提示编译条件是否满足
ifndef _cplusplus
#error This file should be processed with C++ compiler.
#endif
--编译过程中的任意错误信息意味着无法生成最终的可执行程序
类似的,#warning用于生成编译警告
#line用于强制指定新的行号和编译文件名,并对源程序的代码重新编号
#line number filename
filename可以省略
#line编译指示符的本质是重定义_LINE_和_FILE_
第23课 #error和#line使用分析
#error的用法:
示例程序:
1 #include <stdio.h> 2 3 #ifndef __cplusplus 4 #error This file should be processed with C++ compiler. 5 #endif 6 7 class CppClass 8 { 9 private: 10 int m_value; 11 public: 12 CppClass() 13 { 14 15 } 16 17 ~CppClass() 18 { 19 } 20 }; 21 22 int main() 23 { 24 return 0; 25 }
先注释掉3-5行的代码,使用gcc编译结果如下:
当出现这样的编译错误后不一定是我们的代码错了,可能是我们的编译器用错了。比如我们使用了开源代码或者第三方库经常会出现这样的错误。这样的错误我们不好定位,甚至看不懂这样的错误信息,这时我们只需要加上第3-5行的代码,然后再进行编译。
加上3-5行的程序后,gcc编译结果如下:
#error在条件编译中的应用:
1 #include <stdio.h> 2 3 void f() 4 { 5 #if ( PRODUCT == 1 ) 6 printf("This is a low level product! "); 7 #elif ( PRODUCT == 2 ) 8 printf("This is a middle level product! "); 9 #elif ( PRODUCT == 3 ) 10 printf("This is a high level product! "); 11 #endif 12 } 13 14 int main() 15 { 16 f(); 17 18 printf("1. Query Information. "); 19 printf("2. Record Information. "); 20 printf("3. Delete Information. "); 21 22 #if ( PRODUCT == 1 ) 23 printf("4. Exit. "); 24 #elif ( PRODUCT == 2 ) 25 printf("4. High Level Query. "); 26 printf("5. Exit. "); 27 #elif ( PRODUCT == 3 ) 28 printf("4. High Level Query. "); 29 printf("5. Mannul Service. "); 30 printf("6. Exit. "); 31 #endif 32 33 return 0; 34 }
我们在编译的时候如果忘记了定义PRODUCT宏,也可以编译通过,但运行结果不是我们想要的,我们希望在没有定义PRODUCT宏的时候,程序编译报错。
我们修改程序,加入#error编译错误信息:
当我们不定义PRODUCT宏直接编译时,结果如下:
这正是我们想要的结果。
#line的用法
#line在现代编译器中基本不再使用了。
使用示例:
以前的程序由多人开发,而且都写在一个文件中,出现编译错误时不知道是谁的程序出错了,所以引入了#line。
小结:
以上是关于C语言进阶--#error和#line分析的主要内容,如果未能解决你的问题,请参考以下文章
我的C/C++语言学习进阶之旅解决使用ninja命令的时候报错:ninja: error: loading ‘build.ninja‘: 系统找不到指定的文件。
我的C/C++语言学习进阶之旅解决使用ninja命令的时候报错:ninja: error: loading ‘build.ninja‘: 系统找不到指定的文件。
我的C/C++语言学习进阶之旅解决使用ninja命令的时候报错:ninja: error: loading ‘build.ninja‘: 系统找不到指定的文件。