1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C言語の規定されていない動作

Posted at

はじめに

C言語の規定されていない動作について調べたことを覚書として残しておく。

調べた結果

ISO/IEC 9899:1999(原文)(和文)にて定義されていることを知る。

恥ずかしながら初めて見ました。(C言語を使って10年ぐらいしますが、、、)

◇ 処理系定義の動作
  • 定義:「3.4.1 implementation-defined behavior」章
  • 動作一覧:「Annex J」 J.3 章
  • コンパイルができて、その動作に再現性がある。
◇ 文化圏固有動作
  • 定義:「3.4.2 locale-specific behavior」章
  • 動作一覧:「Annex J」 J.4 章
  • コンパイルができて、その動作に再現性がある。
◇ 未定義の動作
  • 定義:「3.4.3 undefined behavior」章
  • 動作一覧:「Annex J」 J.2 章
  • コンパイルはできないかもしれないし、その動作に再現性がないかもしれない。(何の保証もない)
◇ 未規定の動作
  • 定義:「3.4.4 unspecified behavior」章
  • 動作一覧:「Annex J」 J.1 章
  • コンパイルはできるが、その動作に再現性はないかもしれない。

まとめ

上記のコードは環境依存のため移植性が低くなるため注意が必要。

特に「未定義の動作」と「未規定の動作」はバグのもとになるため避けたほうが良い。

開発する前にコンパイルのユーザーマニュアルを見る習慣をつける。

参考

C言語 デバッグ完全解説

付録 C 処理系定義の動作について - IPA

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?