--事物的难度远远低于对事物的恐惧!
这个篇章我们来聊聊#error 和#line两个指令。
#error 用于给程序员自定义特有的编译错误消息,用法为:#error message (注意:message不需要双引号)
示例: #error this is a error
类似的还有#warning,用于生成一个编译警告
下边来看看#error的具体用法:
-#error是一种预编译器指示字
-#error可用于提示编译条件是否满足
来看看下边的代码:
#include <stdio.h>
#ifndef __cplusplus
#error This file should be processed with C++ compiler.
#endif
class CppClass
{
private:
int m_value;
public:
CppClass()
{
}
~CppClass()
{
}
};
int main()
{
return 0;
}
上边的代码,其实是一段C++代码,但是编译环境为C环境,那么我们编译结果如下:
从编译错误信息看,错误信息就是我们代码中自定的错误信息,这也就是为什么说#error给我们提示编译条件是否满足,而不至于因为编译条件不满足到处找原因。
说完了#error,现在来谈谈#line:
-#line用于强制制定新的行号和编译文件名,并对源程序的代码重新编号
-用法:#line number filename (filename可省略) 例如:#line 1 file.c
-#line 编译指示字的本质是重定义__LINE__和__FILE__
当多个人同时编写工程项目时,我们可以使用#line指示字重定义文件名跟行号,以便能准确的寻找出出错代码是谁的、在在哪里。下边来看个例子,a.c、b.c、c.c三段代码分别有A、B、C三个人编写,并且对每个人编写的代码都进行了__FILE__ 与 __LINE__的重定义:
#include <stdio.h>
int main()
{
// The code section is written by A.
// Begin
#line 1 "a.c"
printf("%s : %d\n", __FILE__, __LINE__);
// End
// The code section is written by B.
// Begin
#line 1 "b.c"
printf("%s : %d\n", __FILE__, __LINE__);
// End
// The code section is written by Delphi.
// Begin
#line 1 "c.c"
printf("%s : %d\n", __FILE__, __LINE__);
//End
return 0;
}
执行结果如下:
由输出结果,三段代码已经被#line强制指定了新的行号和编译文件名。
总结:
-#error用于自定义一条编译错误信息
-#warning用于自定义一条编译警告信息
-#error和#warning常用于条件编译的情形
-#line用于强制指定新的行号和编译文件名