私はこのコードはCとC++の両方に有効であることを知っている:マクロCでの再定義とC++
#define FOO 0
#define FOO 0
ISO/IEC 14882:2011
16.3マクロ置換[cpp.replace ]
2現在、オブジェクトのようなマクロとして定義されている識別子は、 秒であれば、別の#define前処理ディレクティブによって再定義された である可能性がありますond定義はオブジェクトのようなマクロ定義であり、2つの置換リストは同じです。それ以外の場合、プログラムは不正です。 同様に、ファンクションのようなマクロとして現在定義されている識別子は、 という別の#defineプリプロセッサディレクティブによって再定義されてもよく、第2の定義は、ファンクションのようなマクロ定義であり、パラメータの数字と綴りが同じで、置換リスト は同一であり、そうでない場合、プログラムは不正である。
しかし、このコードはどうですか?
#define FOO 0
#define FOO FOO
置換リストは、前処理の開始時(最初の置換が発生した場合のみ)で同一ではありません。
これは私にとっては悪いアプローチのようです。将来の開発者が混乱やエラーを引き起こす可能性があります。 –
@Jonathan Wood私はこれを実際のコードで使用したくない、ちょうど面白い瞬間 – FrozenHeart