私は、Cで主な機能を最小限に表現する最も正直な方法についてたくさん考えていました。それは私にとって興味深い)。次のように長い間 mainをint main(...){}に定義する際に問題がありますか?
は、この日に、私はメインの定義好む:int main(int argc, char **argv)
{
return 0;
}
これで私の問題は、それが引数を明示的になりますので、私は通常、にもかかわらず、これらの引数を使用したことがないということであるIそれらを書くためにコードについて十分気にしないでください。
だから私は、それが明示的に多くの人がint main(void){}
定義の中でそうであるように関数は、引数を持たないことを言っていない、と私はそれに満足していので、これは、正直である
int main()
{
return 0;
}
を始めました。
しかし、私は、mainのバリデーシックな定義を使うと、関数が引数を持っているかのように私に "見える"ため、mainの定義がより快適になるという考えがありましたが、私は正しい今。
int main(...)
{
return 0;
}
このような表記の乱用に問題はありますか?つまり、...は、パターンの関数に使用されることを意図されています(次の引数の数が導き出されます)。一方、このメインはこのパターンに適合せず、技術的には表記の誤用です。
私は他の読者に誤解を招く表記があると理解しています(...多少の高度な概念であり、悪用されると誤解を招く)。コードを共有する際には他のプロトタイプも好む。私はそれが有効であるかどうかだけに興味があります。私が持っている
質問は以下のとおりです。
がメインポータブルの可変引数定義であるか、それはいくつかのコンパイラはそれを好きでない可能性があります。
このような定義を行うのは大丈夫ですか、そうすることでランタイム/コンパイル時に影響しますか?
'(void)'および '(int、char **) '以外のシグネチャのサポートは実装定義のため、ベンダーに確認してください。コードは移植性がありません。 –
'int main(...)'を試しましたか?あなたのコンパイラがそれを正当なものとして受け入れたら、どのコンパイラを使っていますか? – user3386109
@ user3386109 "g ++(Debian 4.7.2-5)4.7.2"、 "Debian clangバージョン3.0-6.2(tags/RELEASE_30/final)(LLVM 3.0に基づいています)" – Dmitry