在c99标准中,主要功能可以用两种风格定义:
int main(void)
或
int main(int argc, char \* argv[])
但我试过(llvm 8 c99(-std = c99))
int main()/main()
并且没有警告或错误。
如何理解c99中的main
定义。哪里可以找到clang中main
函数的整个定义类型?
答案 0 :(得分:1)
省略int
类型是默认情况。而对于函数返回类型也是如此。函数args的void
类型相等,函数没有参数。空args'()'表示参数及其计数及其类型未被指定。
答案 1 :(得分:0)
由于历史原因,大多数编译器不会对int main()
或main()
发出警告 - 因为这是main()在C标准化之前的主要原因。
GCC有一些警告选项可以检测到它。
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]
llvm中有一个bug report,似乎最近修复了这个问题。