⑴ 請教高手關於頭文件條件編譯#ifndef的問題 下面的程序有哪位高手給解釋一下啊 各個層次關系 小弟看不懂
最外層的#ifdef是這個樣子:
#ifndef __MENU_H
#define __MENU_H
...
#endif /* __MENU_H */
這是為了確保menu.h只被包含一次。第二次包含時,由於__MENU_H已經被定義,整個文件的內容就被跳過了。
__cplusplus是個特殊的宏,只在C++程序中被定義。這樣,在C代碼中,看到的代碼是這個樣子的:
...
void Show_HomeScreen(void);
而在C++代碼中,看到的則是這個樣子:
extern "C" {
...
void Show_HomeScreen(void);
}
最主要的用處是函數被聲明為extern "C",也就是在目標文件中用C的方式進行編碼和查找。C的方式只有函數名,而C++的方式則把參數也編碼了進去,這樣才可能允許函數重載。比如,test(int)在C代碼里的符號名就是test,而在C++中則不同。在MSVC(在不同編譯器中不同)中是「?test@@YAXH@Z」。一個函數要同時在C和C++中使用,一般都回在頭文件聲明時放到一個extern "C"塊里。
⑵ 關於C語言中頭文件的條件編譯的問題
例如,常會將結構體類型的定義放在頭文件中(例如FILE結構體,tm結構體等),如果不加條件編譯,那麼就可能會出現同一個程序中的不同文件由於包含了同一個頭文件而導致同一個結構體類型的重復定義,而C中不允許重復定義,所以會出錯。
⑶ 關於c語言頭文件編譯和運行的問題
1、只要在程序開頭加入#include<頭文件名>,在編譯過程當中,頭文件自動會被添加到源文件當中一起進行編譯。
2、編譯,編譯程序讀取源程序(字元流),對之進行詞法和語法的分析,將高級語言指令轉換為功能等效的匯編代碼,再由匯編程序轉換為機器語言,並且按照操作系統對可執行文件格式的要求鏈接生成可執行程序。
C源程序頭文件-->預編譯處理(cpp)-->編譯程序本身-->優化程序-->匯編程序-->鏈接程序-->可執行文件。
⑷ c++中如何編譯頭文件,編譯頭文件的作用,
編譯頭文件的理解竅門,在include語句。
你可以理解為,include就是替換,在編譯的時候,在include的位置完整的將頭文件「嵌入」進去,在cpp文件中共同編譯。如果一個頭文件沒有被任何文件包含(include),那麼它不會編譯。
頭文件,你可以簡單的認為就是「避免重復」,將重復的聲明放在一起,方便代碼閱讀和管理,同時頭文件具有方便介面和安全檢查方面的作用。
⑸ 為什麼在頭文件裡面用條件編譯呢程序如下
防止重復編譯。比如,第一次使用該頭文件後,LCDHEARD被定義過,以後再使用該頭文件,就不會重新編譯了。
⑹ 為什麼C語言頭文件中要用條件編譯
如果你說的是文件中避免重復包含的預處理指令,有兩個原因
a)重復編譯相同的內容,即使不會導致語法錯誤,對編譯器也是極大的開銷,在大工程中,絕對是不可容忍的,持續編譯集成的代價是很高的,能省必須省
b) 有很多語法元素是不可重復編譯的,例如類型定義。你僅僅考慮變數,是遠遠不夠的。實際中,變數在頭文件中的使用是非常少的,因為全局變數也是能避免就避免的
⑺ c語言中如何編譯頭文件啊
只要在程序開頭加入#include<頭文件名>,在編譯過程當中,頭文件自動會被添加到源文件當中一起進行編譯。
編譯,編譯程序讀取源程序(字元流),對之進行詞法和語法的分析,將高級語言指令轉換為功能等效的匯編代碼,再由匯編程序轉換為機器語言,並且按照操作系統對可執行文件格式的要求鏈接生成可執行程序。
C源程序頭文件-->預編譯處理(cpp)-->編譯程序本身-->優化程序-->匯編程序-->鏈接程序-->可執行文件。