Тип, возвращаемый функцией main

318
08 марта 2018, 11:20

Во многих примерах кода на сайте встречаются как записи вида void main(), так и int main() для главной функции программы.

Какой из них правильный и в чём вообще разница?

Answer 1

Стандарт языка требует обязательного наличия двух возможных реализаций:

  • int main()
    
  • int main(int, char**)
    

То есть в обоих случаях возвращаемым типом является int. Однако, разрешается существование и дополнительных вариантов в том или ином компиляторе:

Its type shall have C++ language linkage and it shall have a declared return type of type int, but otherwise its type is implementation-defined.

Таким образом, вариант, возвращающий int является переносимым между разными реализациями компиляторов, а void к таковым не относится. Но в частности void main() поддерживается компилятором Microsoft Visual C++.

Возвращаемое значение main в общем случае говорит об успешности работы программы. Если всё прошло хорошо, то возвращается ноль - return 0;; иначе следует вернуть какое-то другое целочисленное значение, которое можно обработать на стороне, вызвавшей программу. Разрешается явно не писать return 0; в main. В таком случае, при выходе из функции 0 будет подразумеваться. Аналогичное поведение распространяется и на void вариант от MS. Но если в случае с int код возврата можно вернуть явно через return, то с void main() такой вариант уже не пройдет:

error C2562: 'main': 'void' function returning a value

Правда, вместо этого можно использовать функцию exit(0), которая прерывает выполнение программы и возвращает переданный код вызывающей стороне.

READ ALSO
Утилита для неявных преобразования C++

Утилита для неявных преобразования C++

Может ли кто подсказать утилиту linux для выявления всех неявных преобразований в коде? Желательно с объяснением, как ее использовать?

245
изменение кодировки данных из базы Firebird QT 5.10

изменение кодировки данных из базы Firebird QT 5.10

Qt 510 Как правильно конвертировать данные из базы данных Firebird

277