码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-08-26 13:47:13      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:val   turn   file   mat   this   小结   正是   编译器   \n   

#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!\n");
 7 #elif ( PRODUCT == 2 )
 8     printf("This is a middle level product!\n");
 9 #elif ( PRODUCT == 3 )
10     printf("This is a high level product!\n");
11 #endif
12 }
13 
14 int main()
15 {
16     f();
17     
18     printf("1. Query Information.\n");
19     printf("2. Record Information.\n");
20     printf("3. Delete Information.\n");
21 
22 #if ( PRODUCT == 1 )
23     printf("4. Exit.\n");
24 #elif ( PRODUCT == 2 )
25     printf("4. High Level Query.\n");
26     printf("5. Exit.\n");
27 #elif ( PRODUCT == 3 )
28     printf("4. High Level Query.\n");
29     printf("5. Mannul Service.\n");
30     printf("6. Exit.\n");
31 #endif
32     
33     return 0;
34 }

我们在编译的时候如果忘记了定义PRODUCT宏,也可以编译通过,但运行结果不是我们想要的,我们希望在没有定义PRODUCT宏的时候,程序编译报错。

我们修改程序,加入#error编译错误信息:

技术分享图片

 

当我们不定义PRODUCT宏直接编译时,结果如下:

技术分享图片

 

这正是我们想要的结果。

 

#line的用法

技术分享图片

 

#line在现代编译器中基本不再使用了。

 使用示例:技术分享图片

 

以前的程序由多人开发,而且都写在一个文件中,出现编译错误时不知道是谁的程序出错了,所以引入了#line。

 小结:

技术分享图片

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

标签:val   turn   file   mat   this   小结   正是   编译器   \n   

原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9536966.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!