FAQ 106994 : Xレジスタの値が、EXPR_STACK(INT_EXPR_STACK)領域のアドレス範囲より大きい値なる場合があります。どうしてでしょうか?

プロトタイプ宣言をしないで、リターン値のない関数(アセンブラの関数を含む)を 呼び出した場合、Xレジスタ(スタックポインタ)が不正な値になり、スタックの不整合が発生します。

プロトタイプ宣言のない関数について、コンパイラは int型をリターン値をもつ関数 と見なします。int型のリターン値は、EXPR_STACK(INT_EXPR_STACK)領域を使用します。プロトタイプ宣言せずに関数呼び出しす ると、実際には使用されていないリターン値のためのスタック領域を開放するため、Xレジスタ(スタックポインタ)に不正に2が加算されます。これにより、 スタックの不整合が発生します。

関数(アセンブラの関数を含む)呼び出し前には、必ず、その関数のプロトタイプ宣言を行なってください。

適用製品

740ファミリ用Cコンパイラパッケージ [M3T-ICC740]
他にご質問がございましたら、リクエストを送信してください