[過去ログ]
【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1478440682/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
281: デフォルトの名無しさん [sage] 2017/01/29(日) 14:28:58.62 ID:XKehhdE4 質問です。 VisualStudio2015でReleaseビルドをしていたところ、生成されたEXEに気になる点がありました if(false){ printf("hogehoge"); } という処理を書いたところ、このprintfは到達不可能なのに、EXEの中に"hogehoge"という文字列が含まれていたのです。 ※再現コードなのでhogehoeをprintしてなんの意味があるのかというコードですが 到達不能なのが明らかな部分は最適化で削除されるものだと思っていたのですが、何かしらの私の不手際でしょうか? 最適化は /O2オプションです http://mevius.5ch.net/test/read.cgi/tech/1478440682/281
284: デフォルトの名無しさん [sage] 2017/01/29(日) 17:04:30.90 ID:XKehhdE4 アドバイスありがとうございます >>282 VisualStudioには無いようです。GCCにはあるようですが、ぐぐった限りだと効果はないようなことが散見されました >>283 「不要なコードを削る」というのは、一番単純で効果が高そうなので、まっさきに確実に全除去してくれるだろうと思い込んでいたためです この手のコードが最適化で消えないと、ifdefだらけになりそうなのですが、何か対策はないものでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1478440682/284
287: デフォルトの名無しさん [sage] 2017/01/29(日) 23:12:58.08 ID:XKehhdE4 >>285-286 ご返答ありがとうございます。 どうも文字列をあれこれ変えて、消えたり消えなかったりとよくわからない状況になってきました。 とりあえず、VS2015での最小コードを作れましたので貼り付けます int main() { char text[] = "foofoo"; printf("hogehoge"); if (false) { printf(text); } return 0; } こうすると以下の挙動になります。 このまま: exeにhogehoge, foofooの両方が含まれているのを確認できる printf("hogehoge");を削除: hogehoge, foofooの両方がEXEから消える ※単に0を返すだけの結果固定関数になるため、変数の割り当てすらしなくなるから? http://mevius.5ch.net/test/read.cgi/tech/1478440682/287
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.029s