最小限のコード:
// --------inline.h--------
struct X {
static inline void foo ();
};
#ifdef YES
inline void X::foo () { cout << "YES\n"; }
#else
inline void X::foo () { cout << "NO\n"; }
#endif
// --------file1.cpp--------
#define YES // <----
#include"inline.h"
void fun1 ()
{
X::foo();
}
// --------file2.cpp--------
#include"inline.h"
void fun2 ()
{
X::foo();
}
andを呼び出すfun1()
とfun2()
、それぞれYES
andが出力さNO
れます。これは、同じ の異なる関数本体を参照していることを意味しますX::foo()
。
これをコード化する必要があるかどうかに関係なく、私の質問は次のとおり
です。これは明確に定義された動作ですか、それとも未定義の動作ですか?