→ azureblaze:壞處:會亂搞外面變數 用錯的時候會變超難解的bug 08/19 22:42
→ azureblaze:個人用marco只是為了# ##或其他明顯是文字取代的東西 08/19 22:43
還有 @
→ azureblaze:在c++裡把marco當function基本上是很糟的用法 08/19 22:44
→ diabloevagto:define根本不想用,搞得亂七八糟,compiler抱怨 08/19 23:46
→ diabloevagto:還看不出東西來... 08/19 23:46
→ Killercat:老實講除非像google test framework那種需要靠macro 08/20 07:18
→ Killercat:來定義結構的,其實大多數macro都不太必要... in C++ 08/20 07:18
→ Killercat:C的話迫於無奈倒是沒什麼好說的 XD 08/20 07:19
推 swhaaaaa:謝謝你,真高手,你的回答讓我受益良多 08/20 21:20
welcome~~對了我修改了 inline 附註的第 0 條以避免誤會
其實雖然很多人對 macro 深惡痛絕,
但只要你不要誤用,其實預處理器能成為你非常強有力的工具,
而且 C++ 本身有非常多的特性容易讓人誤用,不是只有 macro 而已。
工作上會遇到很多困難,完成任務和撰寫可讀性高、可維護、高效能的程式很重要
(就像你要設計程式自動產生程式時,你會發現 goto 實在是好用 XD)
關於 macro 當函數用,舉個簡單的例子:
#define SHOW_LOG(...) \
do {\
printf("file: %s\n", __FILE__);\
printf("line: %d\n", __LINE__);\
printf(__VA_ARGS__);\
printf("\nLog_end\n");\
} while(0)
int a = 0;
SHOW_LOG("a = %d", a);
這會幫助你設計(debug 方便輸出)。
還有實務上大量使用的 assert macro,
這可是古老前輩傳下來的必備招數。
最後,加油!我是低手,希望你有天成了 C++ 大師之後,能照顧一下小弟。
※ 編輯: applecool 來自: 123.110.164.174 (08/21 02:57)