//main.c
#include <stdio.h>
#include "swap.h"
int main(void){
return 0;
}
.
//swap.h
void swap(int* a, int* b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
我想知道在编译器中如何工作的预处理器。
我开始从预处理师那里进行分析。
我尝试在终端进行预处理。gcc -E c.c -o c.i
在此代码中
我有一个问题。# 2 "c.c" 2
# 1 "swap.h" 1
# 1 "swap.h"
void swap(int* a, int* b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
# 3 "c.c" 2
extern void hello(void);
int main(void){
return 0;
}
在此代码中
# 2 "c.c" 2
# 1 "swap.h" 1
# 3 "c.c" 2
此代码是什么意思?换句话说,#和数字是什么意思?
“
.c”和“.h”是什么意思?
这些指令表示输出中代码的偏瘫线的起源。
前两个字段是从该点开始的原始文件的行号和源文件名。 之后的任何数字是标志
从预处理器输出上的GCC文档:
# linenum filename flags
这些被称为线条标记。他们根据需要插入 输出(但从不在字符串或字符常数中)。他们的意思是 以下行起源于Line Linenum的文件文件名。 文件名将永远不会包含任何非打印字符;他们是 用八进制序列取代。
文件名发生在零或更多标志之后,即“ 1”,“ 2”,“ 3”, 或“ 4”。如果有多个标志,则将空间分开。这是 旗帜是什么意思:’1’ 这表示新文件的开始。 ’2’ 这表明返回文件(包含另一个文件后)。
’3’ 这表明以下文本来自系统标头文件,因此应抑制某些警告。’4’ 这表明应将以下文本视为包裹在隐式外部“ C”块中。