ダブルアンダースコアは実装に予約されています
上位投票の回答は、C ++でのプログラミング:ルールと推奨事項を引用しています。
「識別子での2つのアンダースコア( `__ ')の使用は、ANSI-C標準に従って、コンパイラーの内部使用のために予約されています。」
しかし、いくつかのC ++およびC標準を読んだ後、アンダースコアがコンパイラーの内部使用のみに制限されていることに言及することはできませんでした。標準はより一般的で、実装のために2つのアンダースコアを予約していますます。
C ++
C ++(現在作業中のドラフト、2019-5-26にアクセス)は次のように述べていlex.name
ます:
- 二重下線__を含む、またはアンダースコアで始まり、その後に大文字が続く各識別子は、使用のために実装用に予約されています。
- アンダースコアで始まる各識別子は、グローバル名前空間の名前として使用するために実装に予約されています。
C
この質問はC ++に固有のものですが、C標準99および17の関連セクションを引用しました。
C99セクション7.1.3
- アンダースコアで始まるすべての識別子と、大文字または別のアンダースコアは、常に使用のために予約されています。
- アンダースコアで始まるすべての識別子は、通常の名前空間とタグ名前空間の両方で、ファイルスコープを持つ識別子として使用するために常に予約されています。
C17はC99と同じことを言っています。
実装とはですか?
C / C ++の場合、実装は大まかにユーザーソースファイルから実行可能ファイルを生成するために必要なセットリソースを指します。これも:
- プリプロセッサ
- コンパイラ
- リンカ
- 標準ライブラリ
実装例
ウィキペディアで言及されているさまざまなC ++実装がいくつかあります。(アンカーリンクなし、ctrl + f "実装")
以下に、Digital MarsのC / C ++実装の例を示します。これらの機能のためにいくつかのキーワードが予約されています。