2017-01-21 10 views
0

のメイン機能、主な機能は、2つのスタイルで定義することができる。C99規格で打ち鳴らすのC99

int main(void) 

又は

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

しかし、私は(LLVM 8つのC99(-std = C99)試み)

int main()/main() 

警告やエラーはありません。

c99でmainの定義を理解する方法。そして、どこで定義されているのは、mainの定義型がどこにあるのでしょうか?

答えて

1

省略された場合のデフォルトはintです。関数の戻り値型についても。 funtion argsのタイプがvoidの場合、その関数には引数がないという点で同じです。空のargs '()'は、引数とその数と型が指定されていないことを意味します。

+0

intはデフォルトよりも前のc99です。それ以降、デフォルトはありません。 – Deduplicator

0

により歴史的な理由に、ほとんどのコンパイラはint main()またはちょうどmain()のために警告しません - それは、GCCがそれを検出することができ、いくつかの警告オプションがあり、主にC.

の標準化前になっているかmain()のだから。 main()については

$ gcc -Wall -Wextra -Wold-style-declaration -Wold-style-definition -Wstrict-prototypes -std=c99 test.c 
test.c:4:1: warning: return type defaults to ‘int’ [-Wimplicit-int] 
main() 
^~~~ 
test.c:4:1: warning: function declaration isn’t a prototype [-Wstrict-prototypes] 
test.c: In function ‘main’: 
test.c:4:1: warning: old-style function definition [-Wold-style-definition] 

int main()用:

$ gcc -Wall -Wextra -Wold-style-declaration -Wold-style-definition -Wstrict-prototypes -std=c99 test.c 
test.c:4:5: warning: function declaration isn’t a prototype [-Wstrict-prototypes] 
int main() 
    ^~~~ 
test.c: In function ‘main’: 
test.c:4:5: warning: old-style function definition [-Wold-style-definition] 

ごく最近、これを固定しているようだwhichg LLVMでbug reportがありました。

関連する問題