我今天在包含#define宏的C++文件中遇到了一個函數。
函數以return語句結尾,後面跟着一個#undef宏。
一個例子是...在C++中返回語句之後的undef宏
int test() {
#define STUFF()...
return 0;
#undef STUFF
}
這是好還是不好的做法,並沒有任何的優勢或劣勢來這樣做,還是在和#undef需要位於要確認的返回之前?
我今天在包含#define宏的C++文件中遇到了一個函數。
函數以return語句結尾,後面跟着一個#undef宏。
一個例子是...在C++中返回語句之後的undef宏
int test() {
#define STUFF()...
return 0;
#undef STUFF
}
這是好還是不好的做法,並沒有任何的優勢或劣勢來這樣做,還是在和#undef需要位於要確認的返回之前?
我不會說#defined
的功能內容類似於'最佳實踐'。由於@IanMedeiros已經表明它是一個預編譯器指令,這意味着編譯器在運行時已經被擴展。它很難理解原作者的想法,但我會考慮哪些文件更多的作者的東西,如推理更明確的辦法:
int test() {
#if defined(INCLUDE_STUFF)
Stuff()
#endif
)
#define和#undef是編譯器指令。它們是代碼預處理的一部分,並且獨立於它們與「真實」代碼關聯的位置而運行。
基本上,編譯運行的代碼之前,它通過每一個指令(的#include和#define的#ifdef)和預處理你的代碼,因此,舉例來說,當你這樣做:
int firstVariable = MY_DIRECTIVE;
#define MY_DIRECTIVE 7
int doesNothing = 9;
int myVariable = MY_DIRECTIVE;
#undef MY_DIRECTIVE
int thirdVariable = MY_DIRECTIVE;
其轉換它在:
int firstVariable = MY_DIRECTIVE;
int doesNothing = 9;
int myVariable = 7;
int thirdVariable = MY_DIRECTIVE;
,只有經過它會編譯你的代碼(在這種情況下,給你一個錯誤MY_DIRECTIVE尚未在第1行定義和7)
對於M礦石信息: Preprocessor directives (cplusplus)
這是一個預編譯指令。它在運行時被忽略。 –