質問: Cプログラミングで最も危険なミスは何ですか? たとえば、`strcpy`を誤って使用すると、スタックオーバーフローとコードインジェクションが発生します。 私はあなたがCWE/SANS Top 25 Most Dangerous Software Errorsを見ることができますC.
回答: Cプログラミングで最も危険な間違いは**です(C**を使用)。これは不評のアサーションですが、何十年もの経験が私を後押ししています。 Cは効率的にマシンコードに翻訳される「抽象マシン」(C標準の考え方)で操作を表現できる優れたプログラミング言語です(変換ツールは高速で実行されます)*および*結果は速い)。しかし、この翻訳は高い価格で行われます。つまり、それらは間違いのための保護手段ではなく、陰に潜む多くの「未定義の振る舞い」があります。例えば、Pointer aliasing rulesは、正確にはほとんど理解できません。新しいコンパイラが使用されたり、最適化スイッチが起動されたときに、うまくいくような(おそらく悪用可能な脆弱性を引き起こすような)コードが生成されます。 "間違いのリスト"を探すのは間違った考え方です。あなたはブラックリストが必要です:「他のすべて」が安全であるという前提の下で避けるべきことです。 **ホワイトリスト**:*のリストを許可する必要があります*他のすべてを除いて開発する方法。成功したCプログラマは、自身の規律を*に維持することができないプログラマです。*は、エンドツーエンドでマスタリングしない構成を使用します。 「マスタリング」とは、Cコンパイラがどのようにアセンブリのオペコードに変換するかを記述する機能で、Cコンパイラが可能なすべての最適化を含むことを意味します。 「Cを使う」ための良い方法は、実際にいくつかの最適化Cでの速度を必要とする1つのまたは2つのルーチン、および高速化が可能になり、より安全な言語のコードの残りの部分、簡単かつ安全にを書くことです開発(例えば、Python、C#、Node.js、Perl ...選択肢が大きい)。