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文件代码的时候,假如每个人在其开始写代码之前都自定义自己的行号和文件名,这样当编译出错时就知道是谁编写的代码的哪一行出了问题,这样就方便问题的查找了。

原文地址:https://www.cnblogs.com/wan0807/p/4994832.html