假設有三條線在頭文件如:只定義一個行頭文件
#define line1
#define line2
#define line3
我想可以肯定的是,當所有的線被註釋掉一號線應該被定義。我也想知道任何兩三條線不應同時處於活動狀態(未發表評論)。例如,如果line2和line3同時處於活動狀態,則編譯器應該生成一個錯誤。
我該怎麼做?
假設有三條線在頭文件如:只定義一個行頭文件
#define line1
#define line2
#define line3
我想可以肯定的是,當所有的線被註釋掉一號線應該被定義。我也想知道任何兩三條線不應同時處於活動狀態(未發表評論)。例如,如果line2和line3同時處於活動狀態,則編譯器應該生成一個錯誤。
我該怎麼做?
確保在沒有其他是line1
定義:
#if !defined(line1) && !defined(line2) && !defined(line3)
#define line1
#endif
如果一個以上的線被定義產生一個錯誤:
#if (defined(line1) && defined(line2)) || (defined(line1) && defined(line3)) || (defined(line2) && defined(line3))
#error "Your message here"
#endif
也許這是你想要什麼:
#if defined(line2) && defined(line3)
//generate error
#endif
「也許這可以幫助你」不是一個答案。 –
將此添加到(可能已添加註釋)的定義中0,line2
和line3
:
#define CHK(a,b,c) (defined(a) && !defined(b) && !defined(c))
#if !(CHK(line1,line2,line3) || CHK(line2,line3,line1) || CHK(line3,line1,line2))
#error "Improper combination line1/line2/line3"
#endif
這應該確保正好三分之一的定義將被激活。
在我看來,這比它需要更復雜。首先,人們可能會懷疑是否有意識的是,CHECK中的第一個'defined'不是否定的。 –
@致命一吉他:如果我正確理解OP的意圖,那麼他/她想要確定**正好三個**定義中的一個是有效的。 –
是的,我不懷疑你的代碼實現了。但在我看來,一個更簡單,更詳細的解決方案比另一個需要首先閱讀的宏更容易理解。 –
使用'#ifdef'和'#error'指令以及'&&'和'||'運算符的組合可以在需要時生成錯誤。 –