私はcode golfを通じて見て、このコードしようとするアイデアを得てきた:この行を追加した後別のプリプロセッサディレクティブを定義することはできますか?
#define D #define
を、すべてのものは、しかし、私はこの中にそれを拡大し、うまく働いた:
#define D #define
D VALUE
をそしてここで私が得ました5コンパイルエラー。私がD
を#define
に変更すると、すべてが問題なく、誰かが説明できるのですが、なぜこのコードが違法ですか?
注:私はVS2008コンパイラを使用しました。
編集:私は、私はコンパイルにエラーリストを提供するために必要なことがわかりいくつかの答えの後:
- エラーC2121:「#」:無効な文字:マクロ展開
- エラーC2146の可能性の結果:構文エラー: ';'がありません識別子 'VALUE'の前に
- エラーC4430:型指定子がない - 想定されています。注:C++はdefault-intをサポートしていません
- エラーC2144:構文エラー: 'void'の前に ';'を付けてください。
- エラーC4430:型指定子がありません - 想定されています。注:C++は、デフォルト-INT
まずエラーがD
がちょうどdefine
ではありませんが、また#
が含まれていることを示してサポートしていません。
実装に依存することがありますので、使用しているコンパイラを明記してください。 –
"なぜこのコードは違法ですか?" - プリプロセッサディレクティブを再定義することはできないためです。 –
@ H2CO3初めてそれが働いたので私はそれを再定義できましたが、その定義の使用後にコンパイルエラーが発生しました。 – ST3