A. C++ スタンドアロン プログラムのエントリ ポイント「main」を定義する次の試みは有効ですか?
いいえ。C++ 標準では、「プログラムには、グローバル関数という名前の関数を含める必要があります」と記載されていますmain
(§3.6.1/1)。あなたのプログラムでは、main
関数はグローバル名前空間にありません。名前のない名前空間にあります。
暗黙的な using ディレクティブは、名前のない名前空間からの名前を参照して、囲んでいる名前空間で使用することのみを許可します。それらの名前を外側の名前空間に追加しません。具体的には、「using ディレクティブは、それが表示される宣言領域にメンバーを追加しません」(§7.3.4/1)。
このプログラムは形式が正しくありませんか?その理由は?
プログラムの形式が必ずしも正しくないわけではありません。main
グローバル名前空間以外の名前空間で名前が付けられた関数を持つことに対するルールはありません。そのような機能は機能ではありません main
。 namespace { int main(); }
とint main()
は 2 つの異なる関数であり、適切な形式のプログラムには両方を含めることができます。
プログラムがグローバル名前空間に関数を持っていない場合、main
そのプログラムは不正な形式であることに注意してください (前述のように、ホストされた環境のプログラムには main 関数が必要なため)。
B. と について話し合いましたEXIT_FAILURE
が、常に である必要があるEXIT_SUCCESS
かどうかについて結論を出すことができません。EXIT_SUCCESS
0
EXIT_SUCCESS
に展開する必要はありません0
。C 標準では<stdlib.h>
、
定義されているマクロは...EXIT_FAILURE
でEXIT_SUCCESS
あり、関数の引数として使用できる整数定数式に展開されexit
、ホスト環境にそれぞれ失敗または成功の終了ステータスを返します (C99 §7.20/3)。
(これらの 2 つのマクロは で定義されている<cstdlib>
ため、C 標準にはそれらの仕様が含まれています)。