C言語のすべてが未定義動作という主張

मूल शीर्षक: Everything in C is undefined behavior

यह क्यों महत्वपूर्ण है

C/C++の安全性問題が業界全体のセキュリティリスクとして注目される

プログラマーが30年間C/C++を使用した経験から、すべてのC/C++コードには未定義動作が含まれており、完璧なCコードを書くことは不可能だと主張。メモリアライメントなど微妙な問題も未定義動作の原因となる。

著者は30年間のC/C++プログラミング経験を基に、すべての重要なC/C++コードには未定義動作(UB)が含まれていると主張している。一般的に知られているダブルフリー、メモリ境界外アクセス以外にも、より微妙な問題が存在する。例として、正しくアライメントされていないポインタへのアクセスを挙げている。同じコードでもLinux Alphaではカーネルが支援、SPARCではSIGBUSでクラッシュ、x86では問題なく動作するなど、アーキテクチャによって動作が異なる。最適化の有無に関係なく、未定義動作はコンパイラが有効なコードを前提として動作するため問題となる。将来のアーキテクチャでは特別なintポインタレジスタが存在する可能性もあり、予測不可能な動作につながる恐れがある。

स्रोत

blog.habets.se — मूल लेख पढ़ें →