5

conio.h ヘッダー ファイルで定義されている 2 つの関数の違いは何ですか?

getch() および _getch()。

デカールに違いはありますか?それとも、更新された基準による単なる違いですか?

4

2 に答える 2

9

これは、Microsoft が数年前に C++ 標準をより厳密に解釈するという決定の一部です。アンダースコアで始まるグローバル名前空間のすべての名前は、実装で使用するために予約されています。これは、それgetchが予約名ではなく予約名であることを意味し_getchます。

したがって、Microsoft は、「この関数と他のすべての POSIX 関数は、実装によって提供されるようなものです。アンダースコアを前に付けて名前を変更して、グローバル名前空間の「予約済み」部分内に保持できるようにします。つまり、ユーザー提供の関数と名前が衝突する可能性はありません。

これらは善意であると言えますし、POSIX コードを破ろうとする悪意にすぎないとも言えます。彼らの本当の動機が何であったかはわかりませんが、最終的な結果は、Microsoft によれば、getch非推奨であり、_getch代わりに使用する必要があるということです。

于 2013-02-23T12:02:21.863 に答える
2

これらの関数は両方とも非標準です (つまり、C++ ISO 標準にありません)。これらは特定のツールチェーンによって提供される拡張機能であるため、そのドキュメントで違いを確認する必要があります。

于 2013-02-23T12:01:40.413 に答える