int main() {
printf("Hello world") ;
main ;
}
Последнее утверждение main ;
не имеет практически никакого значения: это просто взять функцию целеуказатель, конвертацию в указатель, ссылающийся на функцию, а затем выбросить результат прочь.
int main() {
printf("Hello world") ;
main() ;
}
В этом коде используется «основная рекурсия». Функция main()
вызывается внутри main()
. Этот рекурсивный вызов будет продолжаться бесконечно, и он может упасть где-нибудь, когда стек закончится, или он может идти до тех пор, пока вы не остановитесь с помощью Ctrl + C или что-то еще, если компилятор достаточно умен, чтобы преобразовать эту хвостовую рекурсию в простой цикл.
@JoulinRouge Этот о-так-умный комментарий не объясняет _difference_ между двумя способами использования идентификатора 'main', который, кажется, является реальным вопросом здесь. –
Например, это может помочь с правильными правильными ответами ниже: C позволяет утверждению быть простым выражением - то, что оценивается, но не имеет никакого влияния на состояние. Современные компиляторы обычно выдают предупреждение. – Tommy
@underscore_d только что отправил сообщение «вы имели в виду: рекурсия». разница уже объяснена. Вы хотите, чтобы я удалил его? – JoulinRouge