2011-03-03 45 views
18

預處理器指令#if與正常if之間的區別C?我是C的新手。預處理器指令#if與正常之間的區別

+0

你問預處理器做什麼?你問它是如何工作的?你真的在問什麼? – 2011-03-03 02:44:19

+0

我想知道預處理器是怎麼做的! – kevin 2011-03-03 02:52:59

+1

請不要喊,請問語法問題。我不知道「預處理器的工作原理」是什麼意思 - 它當然不清楚S.Lott的哪一種替代品是用來識別的。 – 2011-03-03 06:02:13

回答

17

#前面的語句被稱爲預處理器指令。在代碼實際編譯之前,它們由解析器處理。從使用Google的第一次搜索結果中找到:

預處理指令是包含在我們程序代碼中的行,它們不是程序語句,而是指令爲預處理器。這些行總是以散列符號(#)開頭。預處理器在實際編譯代碼開始之前執行,因此預處理器在任何代碼由語句生成之前將所有這些指令摘要。

因此,#if將在編譯時決定,「正常」如果將在運行時決定。換句話說,

#define TEST 1 
#if TEST 
printf("%d", TEST); 
#endif 

將編譯爲

printf("%d", 1); 

相反,如果你寫

#define TEST 1 
if(TEST) 
printf("%d", TEST); 

該計劃實際上將編譯宏作爲

if(1) 
printf("%d", 1); 
+0

所以我們可以使用我們想要的任何東西? – kevin 2011-03-03 03:17:16

+0

@kevin編號具體'int x = 1; #if X == 1'根本不起作用。 – 2011-03-03 03:30:25

4

預處理器if允許您在將代碼發送到編譯器之前對其進行調整。通常用於停止兩次添加標題代碼。

編輯,你的意思是C++,因爲它被標記爲這樣嗎? http://www.learncpp.com/cpp-tutorial/110-a-first-look-at-the-preprocessor/

+0

停止添加兩次頭文件代碼對於預處理程序來說是非常有限甚至是深奧的使用...幾乎「不正常」。 – 2011-03-03 06:00:29

+0

@Jim Balter根據原始問題,凱文和其他人可能會發現這些答案可能首先在代碼中看到它作爲標頭警衛... – Zak 2011-03-03 06:25:23

+0

這沒有任何理由。事實上,從原始問題來看,這是極不可能的。 – 2011-03-03 20:26:59

3

預處理器if作爲正在編譯的程序的第一步由預處理器處理。正常if在程序執行時在運行時處理。預處理器指令用於啓用條件編譯,根據不同的定義預處理器常量/表達式使用代碼的不同部分。正常if用於控制正在執行的程序中的流程。

-1

預處理指令檢查或在o其他詞,#定義指令,並且在定義的情況下替換定義。因此只檢查宏變量。這是在預處理階段執行的。

正常如果或控制流標記如果檢查與變量或函數返回值的條件。該檢查在執行期間完成。