編譯預處理
專題三:編譯預處理。包括以下章節:
- 編譯過程簡介
- 宏定義與宏使用分析
- 條件編譯使用分析
- #error和#line
- #pragma預處理分析
- #和##運算符使用解析
#error用法
- #error用於生成一個編譯錯誤消息,並停止編譯
- 用法:#error message(message不需要使用雙引號)
- #weaning用於生成一個編譯警告信息,不會停止編譯
- 用法:#weaning message(message不需要使用雙引號)
實例分析4-1
4-1.c
#include <stdio.h>
#define CONST_NAME1 "CONST_NAME1"
#define CONST_NAME2 "CONST_NAME2"
int main()
{
#ifndef COMMAND
#warning Compilation will be stoped ...
#error No defined Constant Symbol COMMAND
#endif
printf("%s\n", COMMAND);
printf("%s\n", CONST_NAME1);
printf("%s\n", CONST_NAME2);
return 0;
}
結果:
#line用法
- #line用於強制指定新的行號和編譯文件名,並對源程序的代碼重新編號
- #line編譯指示字的本質是重定義_LINE_和_FILE_
- 用法: #line number filename(filename可省略)
實例分析4-2
4-2.c
#include <stdio.h>
#define CONST_NAME1 "CONST_NAME1"
#define CONST_NAME2 "CONST_NAME2"
int f();
int main()
{
printf("%s\n", CONST_NAME1);
printf("%s\n", CONST_NAME2);
printf("%d\n", __LINE__);
printf("%s\n", __FILE__);
f();
return 0;
}
//作用:一個文件可能由不同的程序員完成。不同程序員可以定義不同的行,不同的文件名,便於找到誰寫的代碼,多少行出錯
#line 1 "Hello.c"
int f()
{
a+b,
}
結果: