アカウント名:
パスワード:
どういったコードを想定してるの?void main() { const int a; int *b; b = (int*) &a; *b = 1; /*この行が実行されない*/}て感じ?
修正してやったゾ
int main() { extern const int a; int *b; b = (int*) &a; *b = 1; /*この行が実行されない*/}
https://godbolt.org/z/9pJHBg [godbolt.org]
みんなが知りたいのは、
int main() { const int foo = 1; *((int*) (&foo)) = 2; return foo;}
が1を返すのか、2を返すのか、アクセス違反で死ぬのか、だと思うけど。
https://godbolt.org/z/tqNafV [godbolt.org]によるとどのバージョンでも、clangでは1でgccは2らしいんで、今更な気がする。クロスコンパイルができないのは、やっぱ仕様的にも未定義ってことじゃない?
規格的にはconstついてるとromに入れる動作はアリ(つまり、上の組み込み屋さんのは規格通り)らしいんで、確かにconstを取るキャストは失敗してもいいんだと思う。
お、テストコードがわかりやすくなった。
それ、foo と *((int*) (&foo)) を clang が同じオブジェクトと認識できてないだけ。
https://godbolt.org/z/tqNafV [godbolt.org]によるとどのバージョンでも、clangでは1でgccは2らしいんで、今更な気がする。
え? 何言ってんのこの人https://godbolt.org/z/hWHeyF [godbolt.org]
gccは8.1から-Oつけると1になるね
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
192.168.0.1は、私が使っている IPアドレスですので勝手に使わないでください --- ある通りすがり
コンパイルエラーまたは例外の方がありがたい (スコア:1)
どういったコードを想定してるの?
void main() {
const int a;
int *b;
b = (int*) &a;
*b = 1; /*この行が実行されない*/
}
て感じ?
Re: (スコア:2, おもしろおかしい)
修正してやったゾ
int main() {
extern const int a;
int *b;
b = (int*) &a;
*b = 1; /*この行が実行されない*/
}
https://godbolt.org/z/9pJHBg [godbolt.org]
Re:コンパイルエラーまたは例外の方がありがたい (スコア:1)
みんなが知りたいのは、
が1を返すのか、2を返すのか、アクセス違反で死ぬのか、だと思うけど。
https://godbolt.org/z/tqNafV [godbolt.org]
によるとどのバージョンでも、clangでは1でgccは2らしいんで、今更な気がする。クロスコンパイルができないのは、やっぱ仕様的にも未定義ってことじゃない?
規格的にはconstついてるとromに入れる動作はアリ(つまり、上の組み込み屋さんのは規格通り)らしいんで、確かにconstを取るキャストは失敗してもいいんだと思う。
Re: (スコア:0)
お、テストコードがわかりやすくなった。
Re: (スコア:0)
それ、foo と *((int*) (&foo)) を clang が同じオブジェクトと認識できてないだけ。
Re: (スコア:0)
https://godbolt.org/z/tqNafV [godbolt.org]
によるとどのバージョンでも、clangでは1でgccは2らしいんで、今更な気がする。
え? 何言ってんのこの人
https://godbolt.org/z/hWHeyF [godbolt.org]
Re: (スコア:0)
gccは8.1から-Oつけると1になるね