1、#error
语法格式:#error token-sequence
主要作用:在编译的时候输出编译错误信息token-sequence,方便程序员检查程序中出现的错误。
实 例:
#include "stdio.h"
int main(int argc, char* argv[])
{
#define CONST_NAME1 "CONST_NAME1"
printf("%s\n",CONST_NAME1);
#undef CONST_NAME1
#ifndef CONST_NAME1
#error No defined Constant Symbol CONST_NAME1
#endif
{
#define CONST_NAME2 "CONST_NAME2"
printf("%s\n",CONST_NAME2);
}
printf("%s\n",CONST_NAME2);
return 0;
}
在编译的时候输出如下编译信息:
fatal error C1189: #error : No defined Constant Symbol CONST_NAME1
若将程序改成如下:
#include "stdio.h" int main(int argc, char* argv[]) { #define CONST_NAME1 "CONST_NAME1" printf("%s\n",CONST_NAME1); #undef CONST_NAME1 #define CONST_NAME1 "CONST_NAME1" #ifndef CONST_NAME1 #error No defined Constant Symbol CONST_NAME1 #endif { #define CONST_NAME2 "CONST_NAME2" printf("%s\n",CONST_NAME2); } printf("%s\n",CONST_NAME2); return 0; }
则编译无误,输出结果为:
2、#pragma
语法格式:#pragma token-sequence
主要作用:触发所定义的动作。如果token-sequence存在,则触发相应的动作,否则忽略。
说 明:此指令一般为编译系统所使用。如在Visual C++.Net 中利用# pragma once 防止同一代码被包含多次。
3、#line
说明:此命令主要是为强制编译器按指定的行号,开始对源程序的代码重新编号,在调试的时候,可以按此规定输出错误代码的准确位置。
形式1
语法格式:# line constant “filename”
主要作用:使得其后的源代码从指定的行号constant开始重新编号,并将当前文件的名命名为filename。
形式2
语法格式:# line constant
主要作用:编译时,准确输出出错代码所在的位置(行号),而在源程序中并不出现行号,从而方便程序员准确定位。
实 例:
#include "stdio.h" void Test(); #line 10 "Hello.c" int main(int argc, char* argv[]) { #define CONST_NAME1 "CONST_NAME1" printf("%s\n",CONST_NAME1); #undef CONST_NAME1 printf("%s\n",CONST_NAME1); { #define CONST_NAME2 "CONST_NAME2" printf("%s\n",CONST_NAME2); } printf("%s\n",CONST_NAME2); return 0; } void Test() { printf("%s\n",CONST_NAME2); }
提示如下的编译信息:
Hello.c(15) : error C2065: 'CONST_NAME1' : undeclared identifier
表示当前文件的名称被认为是Hello.c, #line 10 "Hello.c"所在的行被认为是第10行,因此提示第15行出错。