第23课 #error和#line使用分析

Posted wanmeishenghuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第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。

 小结:

技术分享图片

以上是关于第23课 #error和#line使用分析的主要内容,如果未能解决你的问题,请参考以下文章

第22课 条件编译使用分析

第24课 #pragma使用分析

第25课 #和##操作符使用分析

第10课 struct和union分析

#error和#line使用分析

第17课 ++和--操作符分析