簡體   English   中英

c 語言 gcc 編譯器 *.i 文件 #3 "" 2 這是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM