2015-11-25 #error和#line的使用
1、#error用于生成一个编译错误消息,并立即停止编译。
1.1 用法: #error message //注:message不用加引号
1.2#error编译指示字用于自定义程序员特有的编译错误消息,类似的#warning用于程序员自定义编译警告消息,但不会停止编译。
1.3使用实例:
1 #include<stdio.h> 2 3 void main() 4 { 5 6 #ifndef COMMAND 7 #error COMMAND Undefined... 8 #else 9 printf("%s",COMMAND); 10 getchar(); 11 #endif 12 13 }
当我们对上述代码进行编译时,编译器提示错误:COMMAND Undefined...,然后编译器停止编译。
这时候如果我们在代码中对COMMAND进行定义,如下:
1 #include<stdio.h> 2 3 #define COMMAND "POWER ON" 4 5 void main() 6 { 7 8 #ifndef COMMAND 9 #error COMMAND Undefined... 10 #else 11 printf("%s",COMMAND); 12 getchar(); 13 #endif 14 15 }
这个时候,代码正常运行。
2、#line用于强制指定新的行号和编译文件名,并对源程序的代码进行重新编号。
2.1 用法:#line number filename //其中filename可以省略
#line的本质是重定义 _FILE_和_LINE_。
2.3 使用实例:
1 #include<stdio.h> 2 3 4 void main() 5 { 6 7 8 } 9 10 #line 20 "Mr Wan" 11 12 void fun() 13 { 14 int a 15 int b; 16 int c 17 }
这个时候编译器会报错,错误信息如下:
1>Mr Wan(24) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
1>Mr Wan(26) : error C2143: 语法错误 : 缺少“;”(在“}”的前面)
这个时候错误提示显示文件名和行号就不是之前的行号和文件名了,而是我们自定义的行号和文件名,这就有一个好处了。当很多人在编写同一个C文件代码的时候,假如每个人在其开始写代码之前都自定义自己的行号和文件名,这样当编译出错时就知道是谁编写的代码的哪一行出了问题,这样就方便问题的查找了。