[c++] 関数に似たマクロにプリプロセッサディレクティブを追加するのは間違っていますか?


Answers

代わりに次の操作を行いますか?

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

編集:コメントによって提起された懸念に対処; OPの方法が特に間違っているかどうかは分かりません(私は他の答えがそれをカバーしていると思います)。 しかし、簡潔さと明快さは、Cでコーディングするときかなり重要であると考えられる2つの側面です。

このように私は、私が上に提示したような状況を少し考え直すことによって、OPが何をしようとしているかを達成するより良い方法を見つけることを好むでしょう。 私はOPがtriviallised例を使用しているかもしれないと思うが、私は通常、何かが過度に複雑になったり、何かをしようとすると言語が許すべきではないように見える場合、必要なものを達成するためのよりよい方法がある。

Question

私の質問はこの1つまたはこれと似ていますが、実際には同じではなく、2番目の回答が受け入れられていないことがわかりました。私は、プリプロセッサ指令を追加するのが正しいかどうか尋ねることにしました。関数のようなマクロが呼び出されますか?

私の場合、私は関数のようなマクロを持っています:

#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