6

最近、IDE を MSVC++ 6 からの MS Visual Studio 2005 に変更したところ、多くの非推奨警告が表示されました。警告を無視するのではなく、それらを _s に相当するものに変更し始めました。しかし、その後、これらが Microsoft のみの実装であることがわかりました。

私はどこかで、彼らがこれらを標準の一部にするよう推し進めていることを読みました。それは...ですか?

これらの_s関数を使用することは良い考えですか? または、何か他のものを使用する必要がありますか?

ありがとう。

4

5 に答える 5

12

関数は C 標準の*_s()一部ではありませんが、追加を提案する保留中の「テクニカル レポート」があります (TR のルーチンが Microsoft のルーチンとまったく同じなのか、それとも単に似ているのかはわかりません)。 .

TR 24731-1: C ライブラリの拡張パート I: 境界チェック インターフェイス:

古い関数を引き続き使用したい場合は、マクロを定義することで非推奨の警告を静かに保つことができます_CRT_SECURE_NO_WARNINGS(_CRT_SECURE_NO_DEPRECATEまだサポートされている可能性がありました)。

于 2009-03-06T03:12:40.337 に答える
1

標準機能を使用し、Microsoftがデフォルトでオンにしているサディスティックな警告を無効にして、標準に準拠したコードを記述しないようにする必要があります。「_s関数」は単一のベンダーの発明であり、他のベンダーによって実装されたことがないため、(提案されていますが)標準Cに追加されることはないと私は真剣に疑っています。(私たちがそれに取り組んでいる間、POSIXのすべてをC標準に組み込みましょう...)

于 2010-08-14T07:17:32.310 に答える
1

私が知る限り、それらは標準化のために検討されています。提案はTR 24731です。

それらを使用するのが良い考えかどうかについては、はいと言います。エラーをキャッチする方法はあまり好きではありませんが、独自のハンドラーを提供できると思います。クロスプラットフォームの互換性が必要な場合は、Windows 以外のプラットフォームでマクロを実装するか、非推奨の警告をオフにするかの 2 つの選択肢があります。

大規模なコードベースを調べた結果、すべてのプログラマーに文字列操作に C 標準ライブラリ関数を正しく使用させることはほとんど不可能であると判断したため、それを修正することを目的とするすべての追加は歓迎されます。

于 2009-03-06T03:16:16.787 に答える
1

IDE をアップグレードし、Microsoft ライブラリもアップグレードしました。率直に言って、Microsoft はこれらの古い関数の一部を実際に削除し始めると述べていますが、(後方互換性のために) 古いライブラリを引き続き使用することができます。前向きに開発している場合は、新しい機能を使用できると思います。逆方向に開発している場合 (またはバージョンが何であるかを気にしない場合) は、古い関数を使用することをお勧めします。

于 2009-03-06T03:08:12.343 に答える
1

Microsoft プラットフォームをターゲットにしている場合は、必ずそれらを使用してください。そうでない場合でも、Microsoft 以外のプラットフォームにソフトウェアを移植する必要がある場合 (または必要な場合) は、いつでも自分で実装できます。

最悪の場合#ifdef、条件付きでコンパイルするためにいくつかの s を使用することになります。

于 2009-03-06T03:09:22.730 に答える