編譯宏宏
1. 編譯器預定義的宏(可以用來區分使用的是哪種編譯器) 詳細�0�3
1、_MSC_VER 是微軟C/C++編譯器——cl.exe 編譯代碼時預定義的一個宏。需 要針對cl 編寫代碼時, 可以使用該宏進行條件編譯。 2、_MSC_VER 的值表示cl 的版本。需要針對cl 特定版本編寫代碼時, 也可以使用 該宏進行條件編譯。 3、_MSC_VER 的類型是"int",具體版本號定義如下: MS VC++ 9.0 _MSC_VER = 1500 MS VC++ 8.0 _MSC_VER = 1400 MS VC++ 7.1 _MSC_VER = 1310 MS VC++ 7.0 _MSC_VER = 1300 MS VC++ 6.0 _MSC_VER = 1200 MS VC++ 5.0 _MSC_VER = 1100 其中MS VC++ 9.0 就是Visual C++ 2008,MS VC++ 8.0 就是Visual C++2005。 二、介紹預定義宏「__GNUC__」 1、__GNUC__ 是gcc 編譯器編譯代碼時預定義的一個宏。需要針對gcc 編寫代碼時, 可以使用該宏進行條件編譯。 2、__GNUC__ 的值表示gcc 的版本。需要針對gcc 特定版本編寫代碼時,也可以使 用該宏進行條件編譯。 3、__GNUC__ 的類型是「int」 三、預定義宏"__MINGW32__" 1、MinGW編譯器 四、symbian sdk 預定義宏: symbian 平台,定義"__SYMBIAN32_" 3rd MR 版及之前的那個3rd 版本,定義"__SERIES60_30__" 3rd FP1 版,定義"__SERIES60_31__" 3rd FP2 版,定義"__SERIES60_32__" 另外,還有一個"__SERIES60_3x__"。若不需區分具體是哪一個3rd 版,則用之。
2. 宏和函數的區別以及C語言的編譯鏈接過程
宏在編譯之前,需要進行預處理,將宏直接提換成宏定義的代碼,是直接替換,也就是說,在預處理之後,你再看代碼,發現宏定義已經被替換過來了,你看到是你定義之後的那一串代碼。
而函數,在編譯之後,有一系列調用函數的過程,比如,傳參,壓棧等,這部分是編譯器所做的。
C 語言編譯鏈接過程:
test.c(原始代碼) --> 預處理 --> test.i(經過預處理的)--> 編譯 --> test.s(匯編代碼)--> 匯編 --> test.o(目標文件,其實這部分已經是單個文件的完整二進制文件了,只是還不能執行,如果不懂這句話,可以再問我,其實這部分知識,平時也很少遇到) --> 鏈接 --> test (可執行文件,比如一個程序由3個代碼文件共同生成,那麼就會有3個.o格式目標文件,鏈接是把多個目標文件真正的聯系在一起,比如a.o 中使用了 b.o中的一個函數,那麼它們兩個之間的地址是如何確定的(同理,可引申到使用函數庫的問題,使用printf函數,也是需要鏈接器進行確定printf函數地址,才能知道如何調用。)這個就是鏈接器的作用)
3. EXCEl宏運行編譯錯誤是怎麼回事
這是隱藏程序的VBA代碼執行出錯。解決方法:
1)在Excel中按 Alt+F11 打開宏編輯器;
2)在宏編輯器中按 Ctrl+R 打開 工程資源管理面板(如果已打開,按 Ctrl+R 後不會有任何變化);
3)在工程資源管理面板中找到你的那個文件,點開,檢查是否存在「模塊n」(n為1、2……),在這些模塊上逐個點右鍵,「移除模塊n」。
4)最後保存,即可。
4. 如何在C語言中用宏來判斷當前編譯器
熱心網友
一.
#define是C語言中提供的宏定義命令,其主要目的是為程序員在編程時提供一定的方便,並能在一定程度上提高程序的運行效率,但學生在學習時往往不能理解該命令的本質,總是在此處產生一些困惑,在編程時誤用該命令,使得程序的運行與預期的目的不一致,或者在讀別人寫的程序時,把運行結果理解錯誤,這對 C語言的學習很不利。
1#define命令剖析
1.1 #define的概念
#define命令是C語言中的一個宏定義命令,它用來將一個標識符定義為一個字元串,該標識符被稱為宏名,被定義的字元串稱為替換文本。
該命令有兩種格式:一種是簡單的宏定義,另一種是帶參數的宏定義。
(1) 簡單的宏定義:
#define <宏名><字元串>
例: #define PI 3.1415926
(2) 帶參數的宏定義
#define <宏名> (<參數表>) <宏體>
例: #define A(x) x
一個標識符被宏定義後,該標識符便是一個宏名。這時,在程序中出現的是宏名,在該程序被編譯前,先將宏名用被定義的字元串替換,這稱為宏替換,替換後才進行編譯,宏替換是簡單的替換。
1.2 宏替換發生的時機
為了能夠真正理解#define的作用,讓我們來了解一下對C語言源程序的處理過程。當我們在一個集成的開發環境如Turbo C中將編寫好的源程序進行編譯時,實際經過了預處理、編譯、匯編和連接幾個過程,見圖1。