1. ホーム
  2. c++

[解決済み] main関数でargcとargvの名前を変えても大丈夫ですか?

2023-06-11 20:16:43

質問

多くのプログラムでは、多くの引数や文字列の配列に標準的な名前を使用しています。main関数のプロトタイプは次のようになります。 int main(int argc, char *argv[]); . しかし、これらの変数にカスタム名を選択した場合、何かを壊してしまうのでしょうか?

例えば int main(int n_of_args, char *args[]);

コンパイラのコンテキストでは、すべてがうまくいっています。これらの変数はmain関数のローカル変数なので、どんな名前を持っていても構いません。そして、シンプルなコードは完璧にビルドされ、実行されます。しかし、これらの名前は、プリプロセッサによって使用される可能性があります。だから、これらの引数の名前を変更することは安全ですか?

PS 個人的には、これらの名前は、非常に似ていて、たった1文字しか違わないので、悪いと思います。しかし、誰もが何らかの理由でそれらを使用しています。

どのように解決するのですか?

はい、有効な変数名を使用している限り、安全です。 これらはローカル変数なので、そのスコープが main 関数を越えることはありません。

の5.1.2.1項より。 C 規格 :

プログラム起動時に呼び出される関数の名前は main . この関数に対して は,この関数のプロトタイプを宣言しない。 この関数は の戻り値の型で定義されなければなりません。 int で、パラメータなしで定義されなければならない。

int main(void) { /*  ... */ }

または2つのパラメータ(ここでは argcargv , がありますが、どのような の名前は、それらが宣言された関数に局所的であるため、使用することができます。 宣言された ):

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

またはそれと同等のもの、あるいは他の実装で定義された方法で行います。

とはいえ argcargv などと書くと、これらのパラメータに慣れた他の人がコードを読むときに混乱するかもしれません。 ですから、より明確な側を選んだ方がよいでしょう。