Согласно ISO_14882_2014, 3.6.1 Основная функция [basic.start.main]
The linkage (3.5) of main is implementation-defined.
Какова его связь с g ++, поскольку официальный документ g ++, похоже, не имеет этогоинформация.
Это прямо не упоминается в руководстве, но в главе «Параметры команды GCC» мы имеем это:
-Wmain Предупредить, если тип main является подозрительным. main должна быть функцией с внешним linkage , возвращая int, принимая либо нулевой аргумент, либо два, либо три аргумента соответствующие типы. Это предупреждение включено по умолчанию в C ++ и включено ‘-Wall’ или ‘-Wpedantic’.
-Wmain
main
int
-Wall
-Wpedantic
[Акцент добавлен]
Из этого можно сделать вывод, что связь для main в этой реализации является внешней.
Это предотвращает случайный вызов вашей основной функции или написание «неправильной» основной функции.
Функция main не должна использоваться в программе. Связь (3.5) из основных определяется реализацией. Программа, которая определяет основные как удаленный или который объявляет main как встроенный, статический или constexpr плохо сформирован. Имя main не зарезервировано.