#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。
小结: