В силу исторических причин, большинство компиляторов не предупреждают для int main()
или просто main()
- потому что, как основной(), в основном, перед тем стандартизации С.
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 whichg, кажется, исправил очень недавно bug report.
int только по умолчанию pre-c99, по умолчанию не существует значения по умолчанию. – Deduplicator