未規定の動作とは、複数考えられる動作のうち、どれが実行されるかの要求が課されない動作のこと。未規定の動作への依存で移植性が低下します。その未規定の動作を列挙してみます。
未規定の動作とは、プログラムの動きとして2つ以上の可能性があり、どれが実行されるかについて、C言語の標準仕様として全く要求を課されていない動作のことです。未規定の動作には、例えば、関数の実引数の評価順序などがあります。プログラムが未規定の動作に依存すると、同じプログラムでも処理系によって異なる結果を生じる可能性があることになります。つまり、プログラムを他のプラットフォームへ移植する際に不具合を生じる可能性があるということです。
未規定の動作に依存するプログラムを作ることは避けるべきでしょう。実際、MISRA-C:2012ではRule 1.3「未定義の動作またはクリティカルな未規定の動作の発生があってはならない」で注意を促しています。また、CERT C セキュアコーディングスタンダードには、MSC14-C「必要もなくプラットフォーム依存のコードを書かない」というレコメンデーションがあります。
未規定の動作にはどのようなものがあるのでしょうか。C言語の標準規格であるJIS X 3010:2003(ISO/IEC 9899:1999)の「附属書J 可搬性」を参考に未規定の動作を列挙してみましょう。