[英]c language gcc compiler *.i file #3 "" 2 what is this?
//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”是什么意思?
這些指令指示 output 中特定代碼行的來源。
前兩個字段是從該點開始的原始文件的行號和源文件名。 之后的任何數字都是標志
來自預處理器 output 的GCC 文檔:
源文件名和行號信息由表格的行傳達
# linenum filename flags
這些被稱為線標記。 它們根據需要插入到 output 中(但從不在字符串或字符常量中)。 他們的意思是以下行起源於 linenum 處的文件文件名。 文件名永遠不會包含任何非打印字符; 它們被八進制轉義序列替換。
文件名后面有零個或多個標志,它們是“1”、“2”、“3”或“4”。 如果有多個標志,則用空格分隔它們。 以下是標志的含義:
'1' 這表示一個新文件的開始。
'2' 這表示返回到一個文件(在包含另一個文件之后)。
'3' 這表示以下文本來自系統 header 文件,因此應禁止某些警告。
'4' 這表示以下文本應被視為包含在隱式 extern "C" 塊中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.