アカウント名:
パスワード:
#define T (1?0:1?0:1)#if Tがこう展開されて、#if (1?0:1?0:1)このコンディショナルって未定義じゃないですかね?
どうでしょう? JIS 規格書を読んでみましたが、特に三項演算子を禁止するような記述は見つけられませんでしたが…
例えば、https://gcc.gnu.org/onlinedocs/cpp/If.html#If [gnu.org]によれば、三項演算子は使えないようです。
失礼しました。CPPのソースを見ると使えるようです。https://gcc.gnu.org/viewcvs/gcc/trunk/libcpp/expr.c?revision=215752&am... [gnu.org]
というわけで、演算子順序のバグという線が正しいのかもしれません。
ああFeeBSDの古いgccですね。この辺で直ったのかもしれません。https://gcc.gnu.org/bugzilla/show_bug.cgi?id=36088 [gnu.org]https://gcc.gnu.org/bugzilla/show_bug.cgi?id=35313 [gnu.org]
詳しく調べてくださりありがとうございます。まさにその件のようですね。他の環境でも使えるようですので、 gcc の独自拡張ということも無さそうに思います。
自前でコンパイラのバグを踏んだのは今回で2回目かな。 (今回はかなり前に修正済のバグでしたが。)
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
物事のやり方は一つではない -- Perlな人
三項演算子ってプリプロセッサで使えないんじゃ? (スコア:1)
#define T (1?0:1?0:1)
#if T
がこう展開されて、
#if (1?0:1?0:1)
このコンディショナルって未定義じゃないですかね?
Re:三項演算子ってプリプロセッサで使えないんじゃ? (スコア:1)
どうでしょう? JIS 規格書を読んでみましたが、特に三項演算子を禁止するような記述は見つけられませんでしたが…
Re:三項演算子ってプリプロセッサで使えないんじゃ? (スコア:1)
例えば、
https://gcc.gnu.org/onlinedocs/cpp/If.html#If [gnu.org]
によれば、三項演算子は使えないようです。
Re:三項演算子ってプリプロセッサで使えないんじゃ? (スコア:1)
失礼しました。CPPのソースを見ると使えるようです。
https://gcc.gnu.org/viewcvs/gcc/trunk/libcpp/expr.c?revision=215752&am... [gnu.org]
というわけで、演算子順序のバグという線が正しいのかもしれません。
Re:三項演算子ってプリプロセッサで使えないんじゃ? (スコア:1)
ああFeeBSDの古いgccですね。この辺で直ったのかもしれません。
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=36088 [gnu.org]
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=35313 [gnu.org]
Re:三項演算子ってプリプロセッサで使えないんじゃ? (スコア:1)
詳しく調べてくださりありがとうございます。まさにその件のようですね。
他の環境でも使えるようですので、 gcc の独自拡張ということも無さそうに思います。
自前でコンパイラのバグを踏んだのは今回で2回目かな。 (今回はかなり前に修正済のバグでしたが。)