アカウント名:
パスワード:
どういったコードを想定してるの?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]
こうすると書き換えない?
__attribute__((noinline)) void sub01(int *b) { *b = 1; }int main() { extern const int a; int *b; b = (int*) &a; sub01(b);}
インライン有無で挙動が違うということ?
非インライン(というかexternなスコープ)だと、sub01(int *b)のbがReadOnlyな保証が無くなるからコードを削除するわけにはいかないということでは?
__attribute__((noinline)) を削除すると、インライン展開されて、ReadOnlyな保証が有効になって、*b = 1;が実行されない
すなわち、インライン展開の有無で動作が変わってしまうってことがいいたいの。(https://godbolt.org/z/9pJHBg で確認)
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
人生の大半の問題はスルー力で解決する -- スルー力研究専門家
コンパイルエラーまたは例外の方がありがたい (スコア: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: (スコア:0)
こうすると書き換えない?
__attribute__((noinline)) void sub01(int *b) { *b = 1; }
int main() {
extern const int a;
int *b;
b = (int*) &a;
sub01(b);
}
インライン有無で挙動が違うということ?
Re: (スコア:0)
非インライン(というかexternなスコープ)だと、sub01(int *b)のbがReadOnlyな保証が無くなるからコードを削除するわけにはいかないということでは?
Re:コンパイルエラーまたは例外の方がありがたい (スコア:0)
__attribute__((noinline)) を削除すると、インライン展開されて、ReadOnlyな保証が有効になって、
*b = 1;が実行されない
すなわち、インライン展開の有無で動作が変わってしまうってことがいいたいの。
(https://godbolt.org/z/9pJHBg で確認)