С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 29.12.2020
Сообщений: 29

Как определить идентификатор функции main внутри другой функции?

03.01.2021, 13:57. Показов 2790. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется ф-я, которая содержится отдельно от ф-и main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void read_file(ofstream& fout, lib& book)
{
    system("cls");
    ifstream fin;
    fin.open("lib.txt");
    cout << "Все файлы\n\n";
    string str;
    console_size();
    while (!fin.eof())
    {
        str = "";
        getline(fin, str);
        cout << str << endl;
    }
 
    fin.close();
    cout << "Нажмите Escape, чтобы назад";
 
    char esc = _getch();
    system("cls");
    if (esc == 27) main();
 
}
В ней мне необходимо вызвать main, но так чтобы они находились в двух разных cpp файлах одного проекта.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.01.2021, 13:57
Ответы с готовыми решениями:

Куда лучше писать прототип функции, до функции main() или внутри него?
Вопрос тупой, но хочется писать код чуток лучше.

Вывести в функции main() на экран массив, отсортированный в другой функции
Есть две функции main() и FG(float ARR,int i).Как вывести в функции main() на экран массив отсортированный в функции FG(float ARR,int i). ...

Как вызвать Main из другой функции?
собственно в этом то и вся проблема(( Не знаю как вызвать Main из другой функции.... Может кто помочь??

23
 Аватар для Recrut_rf
381 / 324 / 65
Регистрация: 14.10.2014
Сообщений: 1,377
03.01.2021, 14:00
Цитата Сообщение от Shiihs Посмотреть сообщение
В ней мне необходимо вызвать main, но так чтобы они находились в двух разных cpp файлах одного проекта.
Звучит как полная ерунда.

с функции main приложение стартует и эта функция может быть только одна. Уточните, что вам нужно более чётко
1
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
03.01.2021, 14:01
Цитата Сообщение от Shiihs Посмотреть сообщение
вызвать main
Этого делать нельзя. main в программе запускается первой, и вручную вызывать ее запрещено. Т.е. вы можете вызвать свою функцию из main, но main из другой функции вы вызывать не должны.
1
 Аватар для Recrut_rf
381 / 324 / 65
Регистрация: 14.10.2014
Сообщений: 1,377
03.01.2021, 14:56
Может речь идёт о запуске одного проекта из другого проекта?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.01.2021, 15:00
Цитата Сообщение от Shiihs Посмотреть сообщение
Имеется ф-я, которая содержится отдельно от ф-и main
Где содержится? Чем кормите?
0
 Аватар для eva2326
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
03.01.2021, 16:43
Цитата Сообщение от Shiihs Посмотреть сообщение
В ней мне необходимо вызвать main
Так делать нельзя, но можно использовать обходной вариант:
Используйте 3 функции:
- main
- read_file
- user_main

Функция main сама ничего не делает, а сразу же вызывает user_main:
C++
1
2
3
4
int main()
{
    return user_main();
}
Внутри read_file вместо main вы можете спокойно вызывать user_main.
С функциональной точки зрения это тоже самое, как если бы вы вызывали main:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void read_file(ofstream& fout, lib& book)
{
    system("cls");
    ifstream fin;
    fin.open("lib.txt");
    cout << "Все файлы\n\n";
    string str;
    console_size();
    while (!fin.eof())
    {
        str = "";
        getline(fin, str);
        cout << str << endl;
    }
 
    fin.close();
    cout << "Нажмите Escape, чтобы назад";
 
    char esc = _getch();
    system("cls");
    if (esc == 27) user_main();
 
}
Ну а в user_main вы уже пишите то, что хотели вписать в main.
0
 Аватар для Recrut_rf
381 / 324 / 65
Регистрация: 14.10.2014
Сообщений: 1,377
03.01.2021, 17:00
eva2326, а саму функцию read_file(ofstream& fout, lib& book) откуда вызывать? Создать глобальный объект и из него что ли?
0
 Аватар для eva2326
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
03.01.2021, 17:06
Цитата Сообщение от Recrut_rf Посмотреть сообщение
а саму функцию read_file(ofstream& fout, lib& book) откуда вызывать?
Откуда захотите.

Цитата Сообщение от Recrut_rf Посмотреть сообщение
Создать глобальный объект и из него что ли?
Для запуска обычной сишной функции не нужны никакие дополнительные глобальные объекты.
0
 Аватар для Recrut_rf
381 / 324 / 65
Регистрация: 14.10.2014
Сообщений: 1,377
03.01.2021, 17:18
Цитата Сообщение от eva2326 Посмотреть сообщение
Для запуска обычной сишной функции не нужны никакие дополнительные глобальные объекты
Я наверное сильно туплю, но как? Си от С++, думаю, в данном случае друг от друга никак не отличаются. Что в одном, что в другом прога стартует с функции main (если речь идёт о консольном приложении) или WinMain (если запускается оконное приложение). Про всякие фреймворки сейчас забудем. Ну так вот - ТС нужно:

Цитата Сообщение от Shiihs Посмотреть сообщение
необходимо вызвать main, но так чтобы они находились в двух разных cpp файлах одного проекта
Ключевое здесь - одного проекта.

В вашем примере будет вызываться main, внутри которого user_main

Цитата Сообщение от eva2326 Посмотреть сообщение
Внутри read_file вместо main вы можете спокойно вызывать user_main.
С функциональной точки зрения это тоже самое, как если бы вы вызывали main:
Даже если попробовать сделать вызов через глобальный объект (например в его конструкторе), всё равно получится какая-то ерунда с бесконечной рекурсией. А может я что-то не учитываю....
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
03.01.2021, 17:23
Цитата Сообщение от Recrut_rf Посмотреть сообщение
Си от С++, думаю, в данном случае друг от друга никак не отличаются.
Отличаются. В си можно main вызывать.
0
 Аватар для Recrut_rf
381 / 324 / 65
Регистрация: 14.10.2014
Сообщений: 1,377
03.01.2021, 17:27
Цитата Сообщение от avgoor Посмотреть сообщение
В си можно main вызывать
В нескольких местах что ли?
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
03.01.2021, 17:27
Цитата Сообщение от Recrut_rf Посмотреть сообщение
В нескольких местах что ли?
Как обычную функцию.
0
 Аватар для Recrut_rf
381 / 324 / 65
Регистрация: 14.10.2014
Сообщений: 1,377
03.01.2021, 17:35
вот что у меня для С++ получилось

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
 
 
int user_main()
{
    static int i = 0;
    i++;
    // для тех, кто использует студию вместо
    // __PRETTY_FUNCTION__ используйте __FUNCDNAME__ или __FUNCSIG__
    std::cout << i << __PRETTY_FUNCTION__<< std::endl; 
    return 0;
}
 
struct A
{
    A()
    {
        std::cout << __PRETTY_FUNCTION__<< std::endl;
        user_main();        
    }
};
 
A a;
 
int main()
{    
 
    return user_main();
    
    system("pause");
    return 0;
}
Это всё, на что хватило вычислительных способностей моих мозгов
0
 Аватар для eva2326
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
03.01.2021, 17:42
Цитата Сообщение от Recrut_rf Посмотреть сообщение
Я наверное сильно туплю, но как?
В с++ нельзя вручную вызывать main.
Что бы обойти это ограничение, мы вводим дополнительную функция user_main.
В отличие от main, user_main всегда можно вызвать откуда угодно.
Дальше main просто сразу делегирует вызов user_main, которая делает всю настоящую работу.
Все остальные части программы работают именно c user_main, а не с main.

1. На старте процесс запускает main.
2. main запускает user_main.
3. user_main запускает всё остальное.
4. В какой то момент user_main запускает read_file, которая в свою очередь запускает user_main.
0
 Аватар для Recrut_rf
381 / 324 / 65
Регистрация: 14.10.2014
Сообщений: 1,377
03.01.2021, 17:55
eva2326, спасибо - до меня дошло . Извиняюсь за свой дебилизм
1
840 / 347 / 67
Регистрация: 20.11.2012
Сообщений: 809
03.01.2021, 18:06
Цитата Сообщение от eva2326 Посмотреть сообщение
В с++ нельзя вручную вызывать main.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
 
int foo();
 
int main(int argc, char** argv)
{
    
    if (argc != 566) {
        foo();
        std::cout << "Hello";
    }
    else{
        std::cout << "Main from foo\n";
        return 31337;
    }
        
    return 0;
}
 
int foo()
{
    std::cout << main(566, 0)<<"\n";    
    return 0;
}
Работает.
Миниатюры
Как определить идентификатор функции main внутри другой функции?  
0
840 / 347 / 67
Регистрация: 20.11.2012
Сообщений: 809
03.01.2021, 18:10
Учитывая, что main при запуске программы вызывается из CRT, то почему не вызвать?
Понятно, что так не надо делать, но если очень хочется...
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
03.01.2021, 18:12
Лучший ответ Сообщение было отмечено Shiihs как решение

Решение

WhiteP, тык. Остальное лирика.
3
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
04.01.2021, 01:04
Цитата Сообщение от avgoor Посмотреть сообщение
В си можно main вызывать.
а смысл ?
Цитата Сообщение от WhiteP Посмотреть сообщение
Понятно, что так не надо делать, но если очень хочется...
и зачем ?
Петлю можно сделать в любом месте программы, зачем обязательно дорываться к main ?
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
04.01.2021, 01:30
Цитата Сообщение от SmallEvil Посмотреть сообщение
а смысл ?
Спросите об этом Кернигана. И Ритчи (если тот свет существует, и вы с ним там когда-то встретитесь).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.01.2021, 01:30
Помогаю со студенческими работами здесь

Вызов функции внутри другой функции с передачей локальной переменной по ссылке
Столкнулся с очень с интересной проблемой. Можно ли так делать? #include &lt;iostream&gt; using std::cout; void f(const int...

Определить типы и функции; в функции main() реализовать демонстрацию работы
Определите структуру TreeNode – узел дерева: struct TreeNode { char name; //имя узла TreeNode * nodes; //список дочерних узлов ...

Остановить выполнение функции внутри другой функции
Здравствуйте. Такая проблема Реализовано следующее: при открытии страницы срабатывает функция и выдаётся поочерёдно элементы...

Даны 2 кода по созданию списка, в одном создание списка в функции main в другом в отдельной функции, один код работает а другой нет
#include&lt;stdio.h&gt; #include&lt;malloc.h&gt; #include&lt;string.h&gt; typedef struct sp { char *info; struct sp *next; }sp; char *...

Вызов функции внутри другой функции
Доброго времени суток! Есть код, которые показывают расстановку шахматных фигур на доске, и если ход был сделан не правильно то фигура...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru