2

コーディング IDE の制約から、私はいつもメイン関数を次のように書いてきました。

int main(int argc, char* argv[])

しかし、最初に hello world タイプのアプリケーション構造で開始する IDE では、さまざまな方法で記述されているのを見てきました。たとえば、Xcode では、定数として argv があります。

int main(int argc, const char * argv[])

また、人々が argv[] を二重ポインタとして宣言しているのを見てきましたが、その理由がわかりません:

int main(int argc, char** argv)

これを宣言する方法に関する標準または規則はありますか? ダブルポインターまたは定数を使用する必要がありますか?

おまけの質問: ポインターを示すアスタリスクは、データ型の直後、変数名の直前、または途中で区切る必要がありますか?

4

2 に答える 2

2

これをどのように宣言するかについての基準や慣習はありますか?ダブルポインタ、または定数が必要ですか?

これは、C++標準で明確に定義されています。

参照:
C ++ 03セクション§3.6.1:

パラ2:

戻り型はintですが、それ以外の場合、その型は実装定義です。すべての実装では、次のmainの定義の両方を許可する必要があります。

int main() { /* … */ }

and 

int main(int argc, char* argv[]) { /* … */ }

後者の形式では、argcは、プログラムが実行されている環境からプログラムに渡される引数の数です。argcがゼロ以外の場合、これらの引数は、nullで終了するマルチバイト文字列(NTMBS)(17.3.2.1.3.2)の最初の文字へのポインターとしてargv[0]からargv[argc-1]まで提供され、argv[0]はプログラムの呼び出しに使用される名前または「」を表すNTMBSの頭文字へのポインター。argcの値は非負でなければなりません。argv [argc]の値は0でなければなりません。[注:argvの後にさらに(オプションの)パラメーターを追加することをお勧めします]

于 2012-04-28T17:57:08.513 に答える
0

さまざまな基準で、argvはconstではないと言われていると思います。これで、アプリケーションがargvを変更していない場合、それをconstと宣言できない理由はありません。

于 2012-04-28T17:57:53.783 に答える