#error
#error用于生成一个编译错误的消息
用法:
#error message //message 不需要用双引号包围
实际工程中#error用法
#include<stdio.h>
void f()
{
#if(PRODUCT == 1)
printf("low level product");
#elif(PRODUCT==2)
printf("middle level product");
#elif(PRODUCT==3)
printf("hign level product");
#endif
}
int main()
{
f();
printf("1.Query Information.\n");
printf("2.Record Information.\n");
printf("3.Delete Information.\n");
#if(PRODUCT==1)
printf("4.Exit.\n");
#elif(PRODUCT==2)
prntf("4.High Level Query.\n");
prntf("5.Exit.\n");
#elif(PRODUCT==3)
prntf("4.High Level Query.\n");
prntf("5.Mannul Service.\n");
printf("6.Exit.\n");
#endif
return 0;
}
gcc编译器中给出PRODUCT不同的值:
gcc -DPRODUCT=3 test.c
输出PRODUCT=3时的值
没有定义PRODUCT时:
gcc test.c
./a.out
输出后没有报错,输出1 2 3中的内容
使用#error
在#elif后加上:
#else
#error The "PRODUCT is NOT defined!"
这样,当没有定义PRODUCT时,会报错
#line
#line用于强制指定新的行号和编译文件名,并对源程序的代码重新编号
用法:
#line number filename
#line 编译指示字的本质是重定义__LINE__和__FILE__
#include<stdio.h>
int main()
{
printf("%s:%d\n",__FILE__,__LINE__);
#line 1 "Song"
printf("%s:%d\n",__FILE__,__LINE__);
return 0;
}
输出结果:
test.c:4
Song:1
起初的文件名为test.c,行号为4
#line后将文件名改为Song,在#line下一行开始为第一行
在以前的多人协作开发时要用到#line
谁写的程序就在前面用#line 加上文件名 这样后面编译出错时就可以知道是谁的代码出问题了
小结
#error用于自定义一条编译错误信息
#warning用于自定义一条编译警告信息
#error和#warning常用于条件编译的情形
#line用于强制指定新的行号与文件名,但当今软件开发过程已经不用了