2017-01-21 13 views
0

В C99 стандарте, основная функция может быть определена в двух стилях:основной функция в звоне C99

int main(void) 

или

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

Но я попробовал (LLVM 8 C99 (-std = C99))

int main()/main() 

и нет никаких сообщений.

Как понять определение main в c99. и где найти все типы определения функции main в clang?

ответ

1

Существует int Тип по умолчанию для случаев, когда он не указан. И для функции возвращаемого типа тоже. Тип void для funtion args равен тому, что функция не имеет аргументов. Пустые args '()' означают, что аргументы и его счетчик и его типы не определены.

+0

int только по умолчанию pre-c99, по умолчанию не существует значения по умолчанию. – Deduplicator

0

В силу исторических причин, большинство компиляторов не предупреждают для 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.

 Смежные вопросы

  • Нет связанных вопросов^_^