

コンパイラの最適化オプション -Osをつけると、下記のソースの終了コードが255になってしまいます。
最適化を行わない時や最適化を-O1にしたときは、0を返します。
本来は0が返ると思うのですが、なにかコードの書き方に何か問題ありますでしょうか?
環境は、 gcc 4.2、Mac Xcode 3.1.4上でテストしています。
また、ソースの文字コードの種類はSJISにしています。
const unsigned char gStr[3]="\x82\xAC";
int main(int ac, char **av)
{
const unsigned char cc=0x82;
if(gStr[0]==cc)
return 0;
else
return 0xff;
}
No.3ベストアンサー
- 回答日時:
print("%d %d\n",gStr[0],cc);
とテストコードを入れてみたところ
gcc-4.0.1(Xcode), gcc-4.3.4(MacPorts)、gcc-4.2.1(Xcode/最適化なし,-O1)では
130 130
となりますが
gcc-4.2.1(-O2,-O3,-Os等)で
-126 130
となり、unsignedになっていないようです。
おそらく、gccのバグでしょう。

No.2
- 回答日時:
Macは持っていないのですが、gcc4.3では確認した分では-Osでも違いはでませんね。
-S をつけてサイズ最適化をしたときとしないときのアセンブラソースを出力し、どのような違いがでているか見てみてはいかがでしょうか?
この回答への補足
回答ありがとうございます。
-Os と-O1 のアセンブラをみてみましたが、見事に何もしていませんでしたが、確実に違う結果を出すコードになってます。
gcc 4.2(正確には、4.2.1) と では挙動が異なるのでしょうかね。
-- -Os option ---
_main:
pushl%ebp
movl%esp, %ebp
movl$255, %eax
leave
ret
.globl _gStr
.cstring
_gStr:
.ascii "\202\254\0"
-- -O1 option --
_main:
pushl%ebp
movl%esp, %ebp
movl$0, %eax
leave
ret
.globl _gStr
.cstring
_gStr:
.ascii "\202\254\0"
No.1
- 回答日時:
gccの最適化にはバグがあります。
しかし、例示されたような「無意味なコード」についての最適化バグは修正がリリースされていません。
リリースが無い理由は「無意味なコードが正しく動くように修正を施しても、無意味だから」です。
gccの基本スタンスは「実行せずとも結果が明らかなコードは書くな。そんなの書いてもちゃんとコンパイルする保証はしない」です。
この回答への補足
回答ありがとうございます。
たしかに、ここで示したのは意味のないコードですが、
「結果が明らかでない」コードの挙動がおかしかったので、
原因を調べるために、なるべくプリミティブなコードにして調べています。
しかし、「実行せずとも結果が明らかなコードは書くな」そんなスタンスがあるとは知りませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
プログラムの記法 インラインコ...
-
1日に1人がこなせるプログラム...
-
JANコードとPOSコードは同じ?
-
1、Rstudioで回帰直線を求める...
-
ゲームのアルゴリズム
-
Accessでの抽出で完全一致。
-
ACCESSで、履歴事項を管理する...
-
PreviewKeyDownイベントが2回...
-
VBAでファイルオープン後にコー...
-
AccessでReplace関数を使うときに…
-
エクセルに見えない文字(JISX0...
-
VB2008でGetSystemTimeが正常に...
-
MessageBoxで表示される文字列...
-
Nullの使い方が不正です。
-
ExcelVBAで「Shift_JIS(MS932)...
-
特定行の背景色を変えたいのですが
-
アクセスで桁数を増やしたい
-
Excel VBAについて
-
変数名「cur」について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
access2021 VBA メソッドまたは...
-
1日に1人がこなせるプログラム...
-
JANコードとPOSコードは同じ?
-
1、Rstudioで回帰直線を求める...
-
access2003 クエリSQL文に...
-
Exel VBA 別ブックから該当デ...
-
JavaScriptの定数名が取り消し...
-
COBOLの文法
-
VBAでファイルオープン後にコー...
-
変数名「cur」について
-
エクセルに見えない文字(JISX0...
-
オートフィルタで抽出結果に 罫...
-
Nullの使い方が不正です。
-
PreviewKeyDownイベントが2回...
-
【VB6】実行ファイルとした後、...
-
Javaの改行について
-
C# コードビハインドについて
-
Excelシート上で右クリックがで...
-
木偏に「久」
おすすめ情報