2

非常に頻繁に尋ねられるインタビューの質問. しかし、私は別のウェブサイトで見つけた説明で明確ではありません。このコードを実行しようとすると、_AX宣言されていないエラーが表示されるためです。

main()
  {
   int i;
   i = abc();
   printf("%d",i);
  }
  abc()
  {
   _AX = 1000;
  } 

人々は_AX疑似グローバル変数であると言います。そのため、出力1000が表示されます。

*注: - 宣言されていないエラーを表示_AXしていますが、変数を宣言すると、ガベージ値が表示されます *

4

1 に答える 1

10

これってよく出ますよね?まったくナンセンスです。おそらく_AX、x86で戻り値に使用される「ax」レジスタにアクセスするためのコンパイラ固有の表記法です。ただし、代入と関数の戻りの間でレジスタ内の値が上書きされるべきではないと信じる理由はありません。このプログラムは、未定義の動作を呼び出しています。あなたに仕事を提供してくれる人が、あなたがそのような不適切な慣行を知っていることを期待しているなら、逃げてください。速い。彼らは有能ではありません。

于 2012-11-01T18:07:36.267 に答える