я лично явно предпочитают версию с (void)
, потому что, как правило, лучше, чтобы объявить функции с прототипом. Но форма int main() { ... }
верна, если вы используете ее в определении, а не в декларации, и на самом деле стандарт C использует эту форму в нескольких примерах.
Здесь это определяет и объявляет функцию без прототипа, но для определения ясно, что эта функция не получает никаких аргументов.
Если вы пытаетесь дать форвардное объявление main
, вы не должны использовать эту форму, потому что не было бы предупреждения, если вы вызываете функцию неправильно. Здесь C и C++ также различны, так как C позволяет вам самим вызывать main
, даже рекурсивно, где C++ запрещает такие вещи.
C и C++ - разные языки, синтаксис подобен, но семантика - нет. Нет стандарта C, который допускает функцию 'main' с неопределенными аргументами, а в C' int somefunction() 'означает нечто отличное от' int somefunction (void) '. –
@JoachimPileborg, и это означает даже разные вещи, если это найдено в объявлении (только) или в определении. –
Итак, почему мой компилятор C также за исключением int main() {}, а также int main (void)? – knowledge