Можно ли вызвать main()
в функции main()
в c?
Вызов main() в main() в c
Ответ 1
Да, C позволяет вам вызвать вашу основную функцию (в то время как С++ не)
Ответ 2
Действительно разрешено вызывать main()
из самого себя, даже избегая с тем же методом, который используется для любого другого рекурсивного кода, условие завершения, например:
#include <stdio.h>
int main (int argc, char *argv[]) {
printf ("Running main with argc = %d, last = '%s'\n",
argc, argv[argc-1]);
if (argc > 1)
return main(argc - 1, argv);
return 0;
}
который при запуске как testprog 1 2 3
выводит:
Running main with argc = 4, last = '3'
Running main with argc = 3, last = '2'
Running main with argc = 2, last = '1'
Running main with argc = 1, last = 'testprog'
Однако, поскольку это только анекдотические доказательства, мы должны обратиться к стандарту. Раздел ISO C11 4 Conformance
гласит:
1/В настоящем Международном стандарте термин "должен" должен интерпретироваться как требование о реализации или о программе; наоборот, "не должно" интерпретироваться как запрет.
2/Если требование "должно" или "не должно", которое появляется за пределами ограничения или ограничения времени выполнения, нарушено, поведение undefined. Undefined поведение в этом международном стандарте указано иначе словами "undefined поведение" или отсутствием какого-либо явного определения поведения. В этих трех различиях нет разницы; все они описывают "поведение, которое undefined".
3/Программа, которая правильна во всех других аспектах, работающая на правильных данных, содержащая неуказанное поведение, должна быть правильной программой и действовать в соответствии с 5.1.2.3.
Теперь, поскольку в стандарте на main()
не существует явного запрета, вызывающего себя, пункт 3 выше - это контрольный аспект.
Дальнейшую поддержку можно увидеть в двух местах (полужирный), сначала в разделе 5.1.2.2.3 Program termination
:
1/Если тип возврата функции
main
является типом, совместимым сint
, возврат из начального вызова функцииmain
эквивалентен вызовуexit
функция со значением, возвращаемым функциейmain
в качестве аргумента;
И затем в разделе 7.21.3 Files
:
5/Файл может быть впоследствии повторно открыт, тем же или другим исполнением программы, а его содержимое будет исправлено или изменено (если оно может быть изменено с самого начала). Если функция
main
возвращается к своему оригинальному вызывающему абоненту или если вызывается функцияexit
, все открытые файлы закрываются (следовательно, все выходные потоки очищаются) до завершения программы.
Оба этих подраздела поддерживают возможность того, что могут быть другие вызовы main()
помимо исходного/оригинального.
Ответ 3
Да, мы можем вызвать main() в функции main().
Процесс вызова функции самой функцией называется Recursion.
Ну, вы можете вызвать main() в функции main(), но у вас должно быть условие, которое не вызывает функцию main() для завершения программы.
В противном случае программа никогда не вернется и не запустится бесконечно.
Ответ 4
Да, вы можете. Простая программа:
int main()
{
printf("Anything");
main();
return 0;
}
Объяснение:
A call stack
или function stack
используется для нескольких связанных целей, но основной причиной его наличия является отслеживание точки, в которой каждая активная подпрограмма должна возвращать управление, когда она заканчивает выполнение.
A stack overflow
возникает, когда в стеке вызовов используется слишком много памяти.
Здесь функция main()
вызывается повторно, а ее адрес возврата хранится в стеке. После полной загрузки стека. Он показывает Qaru error
.
Ответ 5
Да, можно вызвать main() внутри main() в C и С++. Это понятие "рекурсия", когда функция вызывает себя. Например:
В C:
#include<stdio.h>
int main()
{
static int i=1; // *
printf("%d\n",i++);
if(i==6)
{
return 0;
}
main(); // recursive call of main()
}
В С++:
#include<iostream>
using namespace std;
int main()
{
static int i=1; // *
cout<<i<<endl;
i++;
if(i==6)
{
return 0;
}
main(); // recursive call of main()
}
ВЫХОД обеих программ:
1
2
3
4
5
* здесь ключевое слово статическое используется в качестве базовой проверки для завершения программы, иначе main() будет продолжать бесконечно называть себя. Например
1
1
1
1
1
1
1
1
1
1
1.. program ends abnormally.
Здесь main() вызывает себя бесконечно, потому что новое целое число "i" создается каждый раз в новом main() с начальным значением 1, если мы не используем ключевое слово static, Итак,
if(i==6)
истинно в каждом main(), называемом рекурсивно, и программа никогда не заканчивается нормально.
Но использование статического ключевого слова создает целое число "i" только один раз (когда main() выполняется в первый раз), а значение "i" увеличивается при каждом рекурсивном вызове main(). Таким образом, рекурсия заканчивается, я 'становится равным 6 как return 0; выполняется.
Дополнительная информация. о статическом ключе: Рекурсивная функция со статической переменной
Ответ 6
да, функцию main можно вызывать сама по себе. Это работа как рекурсивная функция, но в течение бесконечного времени (пока не произойдет переполнение стека). образец кода
Ответ 7
int static val;
main()
{
if(val==0)
{ clrscr(); }
while(val<3)
{ val++;
printf("calld main\n",main());
}
getch();
}
Ответ 8
Да, можно сделать главную функцию рекурсивной функцией как в C, так и в С++. Я протестировал его, представив проблему UVa (№ 10071) и принял ее. Здесь код: Скриншот 1, Скриншот 2
#include<stdio.h>
int main(void)
{
int v,t,s;
if(scanf("%d%d",&v,&t)==2)
{
s=2*(v*t);
printf("%d\n",s);
main();
}
else
return 0;
}
для С++,
#include<iostream>
using namespace std;
int main(void)
{
int v,t,s;
if(cin>>v>>t)
{
cout<<2*v*t<<endl;
main();
}
else
return 0;
}
Ответ 9
Это зависит от использования компилятора u, я написал программу в c, чтобы найти сумму натуральных чисел без использования каких-либо функций или goto только для помощи в записи MAIN-функции внутри функции MAIN (я использовал конд для завершения), она имеет nt дал мой ответ req в компиляторе turbo c, но в devС++ он позволил мне скомпилировать программу и дать выход req.