コンパイラーと関数の引数の不確定な評価順序
C 標準では実装が関数の引数を不特定の順序で評価することを許可していますが、依然としてコンパイラーが実際にこの柔軟性を活用しているかどうかは不明です。不適切に書かれたコードの破損を避けるために、左から右への評価が一般的であると考える人もいるかもしれません。
しかし、評価順序は、引数の型、呼び出し規約、アーキテクチャ、コンパイラ設定などの要因によって異なります。たとえば、Pascal 呼び出し規約を持つ x86 プロセッサは引数を左から右に評価しますが、C 呼び出し規約 (__cdecl) は引数を右から左に評価します。
その結果、クロスプラットフォーム プログラムでは呼び出しを考慮することが重要です。驚きを避けるための慣例。 Raymond Chen のブログと GCC マニュアルの「スタックと呼び出し」セクションによると、コンパイラは特定の状況下で左から右の評価から逸脱する可能性があります。
言語標準では評価順序が未指定のままであることに注意することが重要です。つまり、それは非決定的であり、保証されません。これにより、さまざまなコンパイラやプラットフォームで、特定のプログラムや入力に対してさまざまな実行シーケンスを持つことができます。
以上がコンパイラは実際に、C での不特定の順序の関数引数をどのように処理するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。