2014-05-05 37 views
0

假設有三條線在頭文件如:只定義一個行頭文件

#define line1 
#define line2 
#define line3 

我想可以肯定的是,當所有的線被註釋掉一號線應該被定義。我也想知道任何兩三條線不應同時處於活動狀態(未發表評論)。例如,如果line2和line3同時處於活動狀態,則編譯器應該生成一個錯誤。

我該怎麼做?

+1

使用'#ifdef'和'#error'指令以及'&&'和'||'運算符的組合可以在需要時生成錯誤。 –

回答

4

確保在沒有其他是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 
1

也許這是你想要什麼:

#if defined(line2) && defined(line3) 
    //generate error 
#endif 
+0

「也許這可以幫助你」不是一個答案。 –

1

將此添加到(可能已添加註釋)的定義中0,line2line3

#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 

這應該確保正好三分之一的定義將被激活。

+0

在我看來,這比它需要更復雜。首先,人們可能會懷疑是否有意識的是,CHECK中的第一個'defined'不是否定的。 –

+0

@致命一吉他:如果我正確理解OP的意圖,那麼他/她想要確定**正好三個**定義中的一個是有效的。 –

+0

是的,我不懷疑你的代碼實現了。但在我看來,一個更簡單,更詳細的解決方案比另一個需要首先閱讀的宏更容易理解。 –

相關問題