0

なぜこれが 87 になるのか、私には説明できません。私の IDE はコードブロックであり、私のコンパイラは GNU GCC Compiler です。

unsigned long getHigherValue(unsigned long Value1, unsigned long Value2); 

int main(){
  int a, b = 20;
  b = 22;
  /*============
  It works fine if I replace the two lines above with "int a = 20; int b = 22"
  =============*/
  int c = getHigherValue(a, b);
  printf("%d", c);

  return 0;
}

unsigned long getHigherValue(unsigned long Value1, unsigned long Value2){
  unsigned long HigherValue = Value2;
  if(Value1 > Value2){
  HigherValue = Value1;
  }
  if(Value1 == Value2){
  HigherValue = 0;
  }
  return HigherValue;
}

出力:

87

4

1 に答える 1

10
int a, b = 20;

これaにより、b初期化されず、20 に初期化されます。 の値aindeterminateであるため、プログラムから任意の結果を得ることができます (つまり、未定義の動作です)。

于 2013-05-26T13:05:40.743 に答える