2017-03-05 34 views
0

有兩種類型的宏 - function-like macrosobject-like macros。我可以像對象宏執行各種檢查/操作:#ifdef,#ifndef和#undef是否與函數式宏一起工作?

#ifdef _SOME_OBJECT_LIKE_MACRO // check if some object-like macro is defined 
#undef _SOME_OBJECT_LIKE_MACRO // undefine some object-like macro 
#endif 

#define _SOME_OBJECT_LIKE_MACRO 0xff 

#ifdef#ifndef#undef工作,函數宏?例如:

#ifdef _SOME_FUNCTION_LIKE_MACRO() // check if some function-like macro is defined 
#undef _SOME_FUNCTION_LIKE_MACRO() // undefine some function-like macro 
#endif 

#define _SOME_FUNCTION_LIKE_MACRO() printf("This is such a useful macro!!!\n"); 

這是否行得通?如果沒有,我怎麼能......

  • 檢查
  • 存在檢查存在
  • 取消定義

...一個函數宏?

+2

您應該注意,以下劃線開頭的名稱以及大寫字母或另一個下劃線是絕對保留供實現使用的 - 您不應在自己的代碼中創建此類名稱(儘管您可能使用系統提供的名稱像那樣)。事實上,你可能完全避免使用前導下劃線。 –

回答

2

#ifdef#ifndef#undef使用類似函數的宏,但只需要使用裸宏名稱。不需要括號:

#ifdef _SOME_FUNCTION_LIKE_MACRO 
#undef _SOME_FUNCTION_LIKE_MACRO 
#endif 

另請參閱http://tigcc.ticalc.org/doc/cpp.html#SEC19

+2

請注意,'#undef'之前不需要測試;該標準一直規定'#undef UNDEFINED_MACRO'不是錯誤。 –

相關問題