2014-12-19 35 views
-3

如果頭文件中有一些#define,它是否可用於包含該頭文件的源代碼? [類似於#define Bytef unsigned int]是否從頭文件繼承#define(預處理器指令)

+1

這不是個好問題。你爲什麼問?你試過了嗎? – 2014-12-19 09:12:20

+0

@SouravGhosh我正在修復一個錯誤。在zlib的更新日誌中,我發現使用define更改typedef。所以我認爲改變是定義的,因爲我們需要在源代碼中添加「define」。我試圖谷歌認爲是繼承定義,無法找到結果。所以我想我應該問 – 2014-12-19 09:14:04

+0

預處理器將用包含文件的內容替換'#include'指令。我建議你嘗試一下查看預處理源。 – 2014-12-19 09:14:52

回答

1

是的,你可以做到這一點。包括作品如下:

想象你有一個文件。

header.h 

內容:

void HappyMakerPrototype(); 
void AnotherPrototype(); 

和源文件

src.c 

內容:

void dummydec(); 
#include "header.h" 

void main() 
{ 
    return; 
} 

在彙編它將通過預處理運行的第一步驟。

這裏的include行只是被包含文件的所有內容所取代。

,這樣,如果你需要一個輸出預處理後的文件時,它看起來像:

(在GCC和鏗鏘編譯器,你可以請求與參數-E預處理的文件我想,這將有助於你理解)

void dummydec(); 
void HappyMakerPrototype(); 
void AnotherPrototype(); 

void main() 
{ 
    return; 
} 
+0

感謝downvote。你會如此公平和正確的我這有什麼問題嗎?我很想提高自己的知識和職位。 – dhein 2014-12-19 09:35:12

+0

這是錯誤的,預處理器完成後'#define's不會在輸出中。所有預處理器指令都由預處理器處理。用'gcc -E'測試證實了這一點。 – unwind 2014-12-19 09:35:55

+0

@unwind。我說「在第一次運行」爲了更好地展示發生了什麼。我從來沒有說他們會在輸出。我會澄清這一點。 – dhein 2014-12-19 09:36:44

0

是的,你可以做。當您包含該頭文件時,它將繼承該頭中的所有內容。所以你可以使用這個宏。

0

是的。包含一個文件與您在#include指令的確切位置複製並粘貼頭文件的內容相同。