C语言#error #line #pragma预处理学习
一、#error 的用法
(1)#error 是一种预编译器指示字,用于生成一个编译错误消息
(2)用法:#error message //注意:message 不需要用双引号包围
(3)#error 编译指示字用于自定义程序员特有的编译错误消息。类似的,#warning 用于生成编译警告消息
(4)#error 可用于提示编译条件是否满足。编译过程中的任何错误意味着无法生成最终的可执行程序
(1)#error 是一种预编译器指示字,用于生成一个编译错误消息
(2)用法:#error message //注意:message 不需要用双引号包围
(3)#error 编译指示字用于自定义程序员特有的编译错误消息。类似的,#warning 用于生成编译警告消息
(4)#error 可用于提示编译条件是否满足。编译过程中的任何错误意味着无法生成最终的可执行程序
(5)测试代码
# include <stdio.h>
int main()
{
#error "there is a error,fail to compile "
return 0;
}
(6)测试结果,编译失败,并打印对应error信息。
2. #line 的用法
(1)#line 用于强制指定新的行号和编译文件名,并对源程序的代码重新编号
(2)用法:#line number newFilename //newFilename 可省略
(3)#line 编译指示字的本质是重定义__LINE__和__FILE__
(1)#line 用于强制指定新的行号和编译文件名,并对源程序的代码重新编号
(2)用法:#line number newFilename //newFilename 可省略
(3)#line 编译指示字的本质是重定义__LINE__和__FILE__
(4)测试代码
#include <stdio.h>
//作者 A 写的代码
//--------------------------开始--------------------------
//把 line 的下一行定义为第 1 行,文件名为“a.c”
#line 1 "a.c"
//--------------------------结束--------------------------
//作者 B 写的代码
//--------------------------开始--------------------------
//把 line 的下一行定义为第 1 行,文件名为“b.c”
#line 1 "b.c"
//--------------------------结束--------------------------
//作者 C 写的代码
//--------------------------开始--------------------------
#line 1 "MyCode.c"
int main(){
printf("%s:%d\n",__FILE__,__LINE__);//输出 MyCode.c:4
#line 1 "Test.c"
printf("%s:%d\n",__FILE__,__LINE__);//输出 Test.c:1
return 0;
}
(5)测试结果
三、#pragma message——用于自定义编译消息
(1)message 参数在大多数的编译器中都有相似的实现
(2)message 参数在编译时输出消息到编译输出窗口中
(3)message 用于条件编译可提示代码的版本信息
(4)与#error 和#warning 不同,#pragma message 仅仅代表一条编译消息,不代表程序错误
( 5)测试代码#include <stdio.h>
int main(){
#pragma message("Complie Android SDK 8.0...")
return 0;
}
(
6)测试结果
(7)下面的语句显示被编译文件的名字以及文件被最后一次修改的日期和时间.
#include <stdio.h>
int main(){
#pragma message( "Compiling " __FILE__ )
#pragma message( "Last modified on " __TIMESTAMP__ )
printf("%s\n","i love android!");
return 0;
}
四、#warning
(1)#warning编译指示字用于生成一个编译警告,输出到编译器的消息窗口,当编译器不会停止编译。
(2)测试代码
#include <stdio.h>
int main(){
#warning the is a warning!!
printf("%s\n","i love android!");
return 0;
}
(3)测试结果,编译的时候打印warn信息,但不会停止编译。