コンパイラの最適化オプション -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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
1日に1人がこなせるプログラム...
-
access2003 クエリSQL文に...
-
JavaScriptの定数名が取り消し...
-
1、Rstudioで回帰直線を求める...
-
chatgptでつくってもらったコー...
-
エクセルに見えない文字(JISX0...
-
【VB6】実行ファイルとした後、...
-
ExcelのVBAコードについて教え...
-
ACCESSユニオンクエリでORDER B...
-
JavaScript|特定URLだった時、...
-
特定行の背景色を変えたいのですが
-
変数名「cur」について
-
パイソン。スクレイピング。Chr...
-
pythonにてseleniumを使うも、...
-
まちがっているところ
-
Exel VBA 別ブックから該当デ...
-
【EXCEL】UserFormで入力して ...
-
VBAでファイルオープン後にコー...
-
ペンダントライトのコードの色...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
Exel VBA 別ブックから該当デ...
-
access2003 クエリSQL文に...
-
1日に1人がこなせるプログラム...
-
JANコードとPOSコードは同じ?
-
変数名「cur」について
-
JavaScriptの定数名が取り消し...
-
COBOLの文法
-
JavaScript|特定URLだった時、...
-
Accessの文字列部分一致を合計...
-
1、Rstudioで回帰直線を求める...
-
PreviewKeyDownイベントが2回...
-
ACCESSユニオンクエリでORDER B...
-
エクセルに見えない文字(JISX0...
-
Excel VBAでOpenTextのFieldInf...
-
VBAでファイルオープン後にコー...
-
chatgptでつくってもらったコー...
-
特定行の背景色を変えたいのですが
-
JIPS-Eコードのコード表について
-
Nullの使い方が不正です。
おすすめ情報