餡子付゛録゛

ソフトウェア開発ツールの便利な使い方を紹介。

最適化レベルで結果が変わってしまうC言語のダメなコード

前世紀に書いたgccで-O1と-O3で実行結果が異なるコードです。インライン展開が作用しました。今のバージョンのgccでどうなるかは確認していません。なお、警告は出ると思いますし、処理系によってはコンパイルが通らない事もあると思います。

#include<stdio.h>

int *ptr;

void test(void){
  int a;
  a = 10;
  ptr = &a;
}

void test2(void){
  int b;
  b = 23;
}

main(){
  test();
  printf("Result1: %d\n",*ptr);
  test();
  test2();
  printf("Result2: %d\n",*ptr);
}