2013-02-23 8 views
5

conio.hヘッダにファイル -getchは差()と_getch()

getchは()と_getch(定義された2つの機能)の違いは何です。 decalarationの差は

ありますか?それとも、更新された基準による差ですか?これらの機能の

答えて

2

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

7

それは、より厳格C++標準を解釈するために数年前にマイクロソフトの決定の一部です。これは、アンダースコアで始まるグローバル名前空間内のすべての名前が実装で使用するため予約されていることを述べています。つまり、getchは予約名ではなく、_getchです。

Microsoftは、「この機能と他のすべてのPOSIX関数は、実装によって提供されています。アンダースコアを前に付けて名前を変更してみましょう。ユーザが提供する関数とネームの衝突が発生する可能性はありません。

これは良い意図であるとか、POSIXコードを壊す悪い試みだと言えるでしょう。真のモチベーションはありましたが、最終的にはマイクロソフトによれば、getchは廃止され、代わりに_getchを使用するべきです。

+0

素晴らしい背景説明のために「+ 1」 –

+0

どのような種類のPOSIXコードが壊れていますか? POSIX 'getch()'は 'curses'の一部です。したがって、' getch() 'に依存するPOSIXコードは、とにかく 'curses'のポートを必要とします。 - 二重下線(_)を含むか、または大文字の文字が続くアンダー始まるそれぞれの名前(2.11 :名前と関数シグネチャの –

+0

17.4.3.1.2グローバル名 1の特定の組は、常に実装に予約されています)は、あらゆる用途のための実装に予約されています。 これは_gecthには適用されません。 – Paul

関連する問題