0

重複の可能性:
これらの未定義の動作(i = i ++ + ++ i、i = i ++など)を誰かが説明できますか?
関数パラメーターの評価順序

ここにコードを入力してくださいC言語では、関数の実行は右から左または左から右ですか?右から左にあることがわかりました(関数の実行とは、引数を渡す順序を意味します)。

だから私は左から右に実行する関数またはcの組み込み関数のケースがあるのか​​知りたいですか?

例:-

#include<stdio.h>
int print(int a,int b);
int main()
{
    int a=10,b=20;
    print(++a,a++);
    getch();
    return 0;
}

int print(int a,int b)
{
    printf("%d %d",a,b);
}

したがって、これでは右側から開始し、通過するa=10よりも今a++よりa=11 も通過するので、印刷機能では印刷します++aa=12a=1212 10

4

1 に答える 1

7

関数の引数の評価順序はUnspecifiedです。
c標準は、実装にそれらを評価するための完全な自由を与えます:

  • 左から右または
  • 右から左または
  • その他の魔法の命令

また、実装が従う順序を指定する必要はありません。


参考文献:

C99 標準 6.5.2.2 関数呼び出し
パラ 10:

関数指定子、実引数、および実引数内の部分式の評価順序は規定されていませんが、実際の呼び出しの前にシーケンス ポイントがあります。

C99 標準 3.19:

不特定の動作
この国際規格が 2 つ以上の可能性を提供し、いずれの場合にも選択される要件を課さない動作。

例 規定されていない動作の例は、関数への引数が評価される順序です。

于 2012-10-02T06:13:32.257 に答える