Cの起源について理解しようとすることがあります.SOの質問のほとんどで使用が推奨されない関数があるのはなぜですか. strtok
またはのようstrncpy
に、それらを使用するのは安全ではありません。どこにでも、独自の実装を作成するための推奨事項があります。strncpy
たとえば、標準が BSD strlcpyに変更されず、代わりにこれらの「モンスター」が残っているのはなぜですか?
4 に答える
レガシーな「C」および「C++」コードがたくさんあります。すべての「安全でない」関数を「C」ランタイム ライブラリから削除すると、多くの開発者がコンパイラをアップグレードすることができなくなります。古いコードがすべてビルドされなくなるからです。
「非推奨」のコンパイラ メッセージが表示されることがあるので (MSFT はこれが好きです)、新しいより安全な関数を見つけて使用するように変更します。
もちろん、新しいコードは「安全な」関数を使用する必要がありますが、私たちの多くは古いコンパイラとレガシーコードを維持するために立ち往生しています:)
それらは、「古いシステム」/「コード」との歴史的な先祖代々の関係のためにまだ存在しています。つまり、「下位互換性」をサポートするためです。
たとえば、strtok はスレッドセーフではないため、プログラマ自身よりも環境についてよく知ることはできないため、プログラマが独自のロジックを独自のリスクで使用できるようにするために、独自の実装をお勧めします。
それはすべてただのドグマです。関数は、すべての状況 (つまり、strtok とマルチスレッド) で機能しない可能性があるか、使用の前後に条件がキャッチされることを期待する (つまり、strncpy と終了文字の欠落) という点で、目的に無関心であることを認識して使用してください。 .