Почему главный вызов не разрешен в C++, когда он разрешен в C?

По этому вопросу я пытался найти что-то в документации gcc о том, что происходит, когда я вызываю main в C++. Я ничего не нашел, но обнаружил, что в C его просто прекрасно назвать main. Обратите внимание, что

#include <iostream>
int main() {
    int x; 
    std::cin >> x;
    if (x) main();
}

недопустимо в C++, хотя оно компилируется, если не используется флаг -pedantic. Тем не менее, называя main допускается в С.

Чем отличается C++ от запрета вызова main?

Ответ 1

C++ требует создания конструкторов для статических объектов, которые должны быть вызваны - это может быть реализовано в вызове main. Если вы можете вызвать main, конструкторы могут запускаться несколько раз. C не имеет конструкторов, поэтому не имеет одинаковых проблем.