clang c99的主要功能

时间:2017-01-21 09:11:42

标签: c clang llvm c99

在c99标准中,主要功能可以用两种风格定义:

int main(void)

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

但我试过(llvm 8 c99(-std = c99))

int main()/main()

并且没有警告或错误。

如何理解c99中的main定义。哪里可以找到clang中main函数的整个定义类型?

2 个答案:

答案 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,似乎最近修复了这个问题。