conio.h ヘッダー ファイルで定義されている 2 つの関数の違いは何ですか?
getch() および _getch()。
デカールに違いはありますか?それとも、更新された基準による単なる違いですか?
conio.h ヘッダー ファイルで定義されている 2 つの関数の違いは何ですか?
getch() および _getch()。
デカールに違いはありますか?それとも、更新された基準による単なる違いですか?
これは、Microsoft が数年前に C++ 標準をより厳密に解釈するという決定の一部です。アンダースコアで始まるグローバル名前空間のすべての名前は、実装で使用するために予約されています。これは、それgetch
が予約名ではなく予約名であることを意味し_getch
ます。
したがって、Microsoft は、「この関数と他のすべての POSIX 関数は、実装によって提供されるようなものです。アンダースコアを前に付けて名前を変更して、グローバル名前空間の「予約済み」部分内に保持できるようにします。つまり、ユーザー提供の関数と名前が衝突する可能性はありません。
これらは善意であると言えますし、POSIX コードを破ろうとする悪意にすぎないとも言えます。彼らの本当の動機が何であったかはわかりませんが、最終的な結果は、Microsoft によれば、getch
非推奨であり、_getch
代わりに使用する必要があるということです。
これらの関数は両方とも非標準です (つまり、C++ ISO 標準にありません)。これらは特定のツールチェーンによって提供される拡張機能であるため、そのドキュメントで違いを確認する必要があります。