[英]using macros to place #ifdef in the code
我正在嘗試做這樣的事情
#define VB_S #ifdef VERBOSE
#define VB_E #endif
這樣在代碼中而不是編寫
#ifdef VERBOSE
cout << "XYZ" << endl;
#endif
我會寫
VB_S
cout << "XYZ" << endl;
VB_E
這給了我一個編譯時錯誤:程序中出現“#”錯誤。
任何人都可以闡明什么是正確的方法
您不能將指令放入宏中。 ( #
在宏中作為另一個含義-它是字符串化運算符,並且必須后面跟參數id-但限制早於該含義)
您可以執行以下操作:
#ifdef VERBOSE
#define VB(x) x
#else
#define VB(x) do { } while (false)
#endif
VB(cout << "foo");
與Erik的回應類似:
#ifdef VERBOSE
#define VB(...) __VA_ARGS__
#else
#define VB(...) /* nothing */
#endif
使用可變參數宏的好處是允許在VB()
調用內使用逗號。 另外,在AFAIK中,您可以刪除do
... while
。
我更喜歡以下內容:
#define VERBOSE 1
// or 0, obviously
if (VERBOSE)
{
// Debug implementation
}
這一點更具可讀性,因為VB_S對普通用戶沒有任何意義,但如果(VERBOSE)有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.