[c++] 在類似函數的宏中添加預處理器指令是錯誤的嗎?


Answers

做相反的事情?

#ifdef ANOTHER_MACRO
FUNC_MACRO(aVal + offset, bVal);
#else
FUNC_MACRO(aVal, bVal);
#endif

編輯:解決評論提出的關注; 我不知道是否OP的方法是特別錯誤的(我想其他答案包括)。 但是,用C編碼時,簡潔性和清晰性被認為是非常重要的兩個方面。

因此,我更願意找到更好的方法來實現OP似乎正在嘗試的方式,稍微反思一下上面提到的情況。 我猜OP可能使用了一個簡單的例子,但是我通常在大多數C情況下都會發現,如果某些事情變得過於復雜或者試圖做某件事情似乎不像語言應該允許的,那麼有更好的方法來實現所需要的。

Question

我知道我的問題與這個或者這個類似,但是我發現它並不是真的一樣,而且第二個問題也沒有被接受,我決定詢問是否添加預處理指令是正確的一個函數式宏被稱為?

在我的情況下,我有一個功能像宏:

#define FUNC_MACRO(a, b)  // do something with the variables

並在代碼中的某個地方,如果定義了其他一些宏,則會調用它與特定的區別:

// ...
FUNC_MACRO(aVal
#ifdef ANOTHER_MACRO
                + offset
#endif // ANOTHER_MACRO
           , bVal);
// ...

我測試了我的機器(linux,使用gcc 4.8),它工作正常(有和沒有預處理器指令,有和沒有ANOTHER_MACRO定義),但這樣做是安全的嗎?

我從第一個類似的問題的答案中讀了16.3 / 9段,但是我的情況也是這樣嗎?




Links



Tags

c++ c++   c   macros