看板 C_and_CPP 關於我們 聯絡資訊
看到一個題目問說 #ifndef (WIN32) //do something #endif 跟 if(WIN32){ //do something } 想請問 版上先進 這兩者差別在哪?? 我只知道 通常用#ifdef (WIN32) 是用來判別系統 是win or linux 根據系統(win or linux)的不同做不同的動作 那就前置處理器 跟一般if-else語法 使用時機有差嗎@@? 懇請賜教 謝謝!! -- CyberPanel 5000CP 換 NT.500 http://myurl.com.tw/05bd EmailCash 5000e 換 NT.500 http://myurl.com.tw/rgdq -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.211.120 ※ 編輯: nikeasyanzi 來自: 111.251.211.120 (10/17 23:05) ※ 編輯: nikeasyanzi 來自: 111.251.211.120 (10/17 23:06) ※ 編輯: nikeasyanzi 來自: 111.251.211.120 (10/17 23:10)
Schottky:if (WIN32) {} 裡面若是包含了不存在 Windows 上的 10/17 23:15
Schottky:function call 或 include 不存在的 .h 會有 error 10/17 23:16
kumusou:if(WIN32) 如果沒定義呢? 邊議會錯吧! 10/17 23:21
kwk22:if() 裡面的expression沒定義, compiler就不會過吧 10/17 23:25
diabloevagto:兩個是在不同時候處理的,差蠻多的喔 10/17 23:31
diabloevagto:#的是直接判斷有無,有就把程式碼包進來,沒有就拿掉 10/17 23:40
diabloevagto:if 是在執行階段才判斷,如果有定義就一樣,沒定義 10/17 23:40
diabloevagto:compiler就會出錯,不像#會直接忽略 10/17 23:40
nikeasyanzi:感謝樓上幾位跟cutekid 大 熱心告知 10/17 23:46
nikeasyanzi:所以 應該是用If-else 比較好囉? 10/17 23:47
nikeasyanzi:畢竟complier 可以幫我偵錯? 是這樣嗎XD 10/17 23:48
leiyan:測試的時候#是很好用的 10/17 23:55
azureblaze:沒有哪個比較好 用途根本不一樣 10/18 00:14
kikiqqp:#if比較偏向於編譯器虛指令 10/18 00:54
MOONRAKER:#if根本不是個指令 偏向何謂也 10/18 01:17
plover:preprocessor 完才會進 compiler,不用想奇奇怪怪的名詞 10/18 02:22
plover:這是 C/C++ 很了不起的設計 XD 10/18 02:23
plover:通常會看 _WIN32 有沒有被定義來決定 OS 是不是 Windows 10/18 02:26
plover:Example: http://ppt.cc/jOCG (Chromium project) 10/18 02:27
diabloevagto:兩個不同的東西怎麼不比....... 10/18 09:42
diabloevagto:怎麼能比 10/18 09:43
kikiqqp:上面或許真的沒遇過真的吃#開頭指令的詭異C編譯器 XD 10/18 10:37
littleshan:preprocessor是很糟糕的設計,但畢竟是數十年前的產物 10/18 12:07
littleshan:新的語言多半不再有preprocessor,全部給compiler包辦 10/18 12:12
Bencrie:咦 那不就是有 preprocessing 功能的 compiler 嗎 XD 10/18 19:28
yvb:#pragma 給誰看? 10/18 20:14
sardine:#if在cross compiler用途很大 10/19 06:10
rick68:前置除理器優先處理在前,runtime 的條件判斷式則編譯在後 11/24 17:42