簡體   English   中英

使用宏在代碼中放置#ifdef

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM