Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403

В каком файле исходного кода находится функция main?

03.08.2016, 18:02. Показов 3783. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли как-то программно определить в каком файле исходного кода находиться функция main?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.08.2016, 18:02
Ответы с готовыми решениями:

В каком файле находится форма комментариев?
DLE версия 10.5 тема HotGirls. Под каждой записью есть форма комментариев, чекбокс Подписаться на комментарии и кнопка Добавить. Перерыл...

В каком заголовочном файле находится delay (BCB6)?
В справочной системе C++ Builder 6 Нашел вот этот пример использования функции clock и выдает ошибку не находит функцию delay. Это глюк...

Как мне узнать по классу в каком файле.h он находится?
Здравствуйте. В среде (java) eclipse , как и в NetBeans, есть возможность импортировать не достающие пакеты. Вдруг вы забыли, или вообще не...

19
Заблокирован
03.08.2016, 18:12
Неа. Это может быть и не main. Имя точки входа можно менять при линковке.
1
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
03.08.2016, 18:16
Цитата Сообщение от nimazzzy Посмотреть сообщение
Неа. Это может быть и не main. Имя точки входа можно менять при линковке.
Вопрос был не «где находится точка входа», а «где находится функция main».

JIawliet, какая задача решается?
1
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
03.08.2016, 18:20  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
Имя точки входа можно менять при линковке
ну тогда немножко исправим вопрос: можно ли определить в каком файле находится функция с определенным именем?

Добавлено через 4 минуты
0x10, да вот думаю как происходит раздельная компиляция объектов std::cin, std::cout... я так понял определяются они один раз в одном файле исходного кода, но тогда как во всех других файлах они только объявляются??? должна быть какая-то конструкция по типу:
C++
1
2
3
4
5
6
7
8
9
10
#ifdef // ???
 
exter cin;
exter cout;
 
#else
 
....
 
#endif
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.08.2016, 18:21
Цитата Сообщение от JIawliet Посмотреть сообщение
Можно ли как-то программно определить в каком файле исходного кода находиться функция main?
нельзя.

Цитата Сообщение от JIawliet Посмотреть сообщение
можно ли определить в каком файле находится функция с определенным именем?
нельзя.

но если оч сильно хочется,
вы всегда можете написать функцию,
которая будет отправлять вам по электронной почте
собственное месторасположение.
1
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
03.08.2016, 19:00
Цитата Сообщение от JIawliet Посмотреть сообщение
но тогда как во всех других файлах они только объявляются?
В моем случае в файле iostream:
C++
1
2
3
4
 60   extern istream cin;       /// Linked to standard input                    
 61   extern ostream cout;      /// Linked to standard output                   
 62   extern ostream cerr;      /// Linked to standard error (unbuffered)       
 63   extern ostream clog;      /// Linked to standard error (buffered)
Найдено тупым
Bash
1
grep -Rl 'extern ostream cout' /usr/include/c++/5/
1
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
03.08.2016, 19:06  [ТС]
0x10, ну вот, я так понял это хэдер <iostream>? ок, объявления то есть, а определение где?) и как в случаи определения в одном файле исходного кода не происходит переопределения в другом???

Добавлено через 2 минуты
Мы ж в коде не пишем нечто:
C++
1
std::istream cin;
следовательно, эти объекты создаются и определяются сами...
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
03.08.2016, 19:15
Цитата Сообщение от JIawliet Посмотреть сообщение
следовательно, эти объекты создаются и определяются сами...
Пишем hello, world, компилируем, смотрим, с чем слинковано:
Code
1
2
3
4
5
6
7
$ ldd a.out
    linux-vdso.so.1 =>  (0x00007fffba5fe000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc221482000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc2210bd000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc220db6000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fc2217b7000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc220b9f000)
Взгляд должен остановиться на строке:
Code
1
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc221482000)
Смотрим символы:
Code
1
2
$ nm -D /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep cin
0000000000308a80 B _ZSt3cin
Деманглинг:
Code
1
2
$ c++filt _ZSt3cin
std::cin
1
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
03.08.2016, 20:01  [ТС]
0x10, хочу кое-что прояснить))) объекты cin, cout создаются в единственном экземпляре на все файлы исходного кода? если да, то я до сих пор не понимаю, почему не происходит переопределение в разных файлах исходного кода одного проекта???
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
03.08.2016, 20:06
Цитата Сообщение от JIawliet Посмотреть сообщение
объекты cin, cout создаются в единственном экземпляре на все файлы исходного кода?
После компиляции нет файлов исходного кода. Есть результирующая сборка. В ней объекты должны иметь не более одного определения.

Цитата Сообщение от JIawliet Посмотреть сообщение
если да, то я до сих пор не понимаю, почему не происходит переопределение в разных файлах исходного кода одного проекта???
По факту других определений нет. В заголовочные файлы уже смотрели: там только объявления.
1
Заблокирован
03.08.2016, 20:13
Цитата Сообщение от 0x10 Посмотреть сообщение
Вопрос был не «где находится точка входа», а «где находится функция main».
И что? От этого ответ никак не меняется. Он не найдет ни функцию main, ни точку входа в сорцах.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
03.08.2016, 20:20
Цитата Сообщение от JIawliet Посмотреть сообщение
ожно ли как-то программно определить в каком файле исходного кода находиться функция main?
Если эта информация и остается то только в debug info. Если прога скомпилированна под дебаг чисто теоритически эту инфу можно найти и распарсить.
0
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
03.08.2016, 21:07  [ТС]
0x10, мы немного друг друга не понимаем... вот наглядный пример: есть класс, нужно чтоб объект этого класса был в глобальной области и виден из 2 файлов исходного кода.. мы пишем:
C++
1
2
// first .cpp
SomeClass SomeObject;
C++
1
2
// second.cpp
extern SomeclassSomeObject;
Объекты cin, cout тоже определяются в единственном экземпляре на несколько .cpp, НО в первом .cpp все ясно (объекта cin/cout нет - создать объект), а что во втором????? (как происходит проверка на то что уже создан объект в соседнем .cpp?? понятно, что есть объявление, но почему не происходит определение как и в первом .cpp, что привело б к ошибке ODR! что там за код внутри который определяет, что объект уже создан?????)
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
03.08.2016, 21:27
Цитата Сообщение от JIawliet Посмотреть сообщение
а что во втором?
Они же extern, что не понятно?
0
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
03.08.2016, 22:36  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Они же extern, что не понятно?

создаем .cpp, подключаем <iostream>, пишем простой "hello word" - в <iostream> только объявления cin / cout / cerr / clog, где-то дальше в дебрях хэдеров создаются эти объекты... все ок, все счастливы...

создаем два .cpp, подключаем к каждому <iostream>, и в первом и во втором файле пользуемся cin / cout: в каком-то из файлов, но только в одном, создаются объекты cin / cout / и т.д. (так как extern присутствует во втором файле все ок, все счастливы)... - нет! во втором файле мы снова идем в дебри хэдеров и на тыкаемся на проверку, которая говорит, что объект уже создан!

я не знаю как еще объяснить... давайте парочку примеров:
Пример 1:
C++
1
2
3
4
5
6
7
8
9
10
// first.cpp
#include "Header.h"
 
//=================================================================
int main ()
{
 
 
    return 0;
}
C++
1
2
// second.cpp
#include "Header.h"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// header.h
#ifndef HEADER_H
 
#define HEADER_H
 
namespace qwe
{
    class SomeClass
    {  };
 
    SomeClass SomeObject;
}
 
#endif
компилируем - получаем ошибку линковщика: переопределение объекта...
Пример 2:
C++
1
2
3
4
5
6
7
8
9
10
11
12
// first.cpp
#include "Header.h"
 
qwe::SomeClass SomeObject;
 
//=================================================================
int main ()
{
 
 
    return 0;
}
C++
1
2
// second.cpp
#include "Header.h"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef HEADER_H
 
#define HEADER_H
 
namespace qwe
{
    class SomeClass
    {  };
 
    extern SomeClass SomeObject;
}
 
#endif
компилируем - ура! все работает!
НЕТ! все плохо, мы явно определяем SomeObject в first.cpp, что касается объектов cin / cout - мы никогда их явно не определяем, они определяются в глубинах хэдеров...
А посему там (в хэдерах) происходит какая-то проверка, на то, созданы эти объекты или нет, и я спрашивал все это время именно о этой проверке
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
03.08.2016, 22:41
Цитата Сообщение от JIawliet Посмотреть сообщение
что касается объектов cin / cout - мы никогда их явно не определяем, они определяются в глубинах хэдеров
Не в хедерах, а где-то в библиотеках компилятора.
В заголовках лишь объявление, но нет определения.
Так что да - Вы их не определяете,
они уже определены где-то разработчиками компилятора.
Вы же когда вызываете какую-то библиотечную функцию
не задаетесь вопросом где она определена?
А почему? Почему Вы остановились на объектах?
1
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
03.08.2016, 22:56  [ТС]
Croessmah,
Это грубо говоря выглядит как-то так?:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// header.h
#ifndef HEADER_H
 
#define HEADER_H
 
namespace qwe
{
    class SomeClass
    {  };
 
    extern SomeClass SomeObject;
}
 
#endif
C++
1
2
// second.cpp
#include "Header.h"
C++
1
2
3
4
5
6
7
8
9
10
// first.cpp
#include "Header.h"
 
//=================================================================
int main ()
{
 
 
    return 0;
}
C++
1
2
3
4
// то_что_сокрыто_разработчиками.wtf
#include "Header.h"
 
qwe::SomeClass SomeObject;
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
04.08.2016, 00:32
Лучший ответ Сообщение было отмечено JIawliet как решение

Решение

Цитата Сообщение от JIawliet Посмотреть сообщение
Это грубо говоря выглядит как-то так?
Да, но всё может быть несколько сложнее.
Из исходников GCC 6:
C++
1
2
3
4
5
6
7
8
9
10
11
//globals_io.cc
//...
  typedef char fake_istream[sizeof(istream)]
  __attribute__ ((aligned(__alignof__(istream))));
  typedef char fake_ostream[sizeof(ostream)] 
  __attribute__ ((aligned(__alignof__(ostream))));
  fake_istream cin;//Тупо массив элементов типа char :)
  fake_ostream cout;
  fake_ostream cerr;
  fake_ostream clog;
//...
C++
1
2
3
4
5
6
7
8
9
10
11
12
//ios_init.cc
//...
ios_base::Init::Init()
{
//...
   new (&cout) ostream(&buf_cout_sync);//placement new
   new (&cin) istream(&buf_cin_sync);
   new (&cerr) ostream(&buf_cerr_sync);
   new (&clog) ostream(&buf_cerr_sync);
//...
}
/...
1
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
04.08.2016, 04:11
Цитата Сообщение от JIawliet Посмотреть сообщение
что касается объектов cin / cout - мы никогда их явно не определяем, они определяются в глубинах хэдеров
Уже было явно сказано, но повторю: объявления — в библиотеке. В восьмом посте было показано, что в моем случае это libstdc++.so.6.
1
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
04.08.2016, 04:53
Цитата Сообщение от 0x10 Посмотреть сообщение
Уже было явно сказано, но повторю: объявления — в библиотеке. В восьмом посте было показано, что в моем случае это libstdc++.so.6.
Ну и? Все имена которые есть в каждом юните трансляции помещаются в объектный файл, в табличку соответствия имен адресам, и табличку какие имена запрошены при обращении к extern функциям и переменным. Линкер сшивает первые таблички, при коллизиях жутко ругается трехэтажным матом (если конечно это не статик-поля члены шаблонов). Потом начинает заполнять то что нужно по второй таблице из первой. если там чего то не хватает ругается вообще девятиэтажным матом. Если ничего не столкнулось и все нашлось получилась exe в которой таблиц имен уже нет.

Добавлено через 15 минут
Так что если где то в EXE имена функций а тем более имена файлов исходников де то остались, то это debug info если она туда влинкована. Но опять же сомнительно что в debug info есть имена функций, для дебага достаточно имен файлов и номеров строк.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.08.2016, 04:53
Помогаю со студенческими работами здесь

Нужно, чтобы в функции Main файла исходного кода происходил запуск обработки формы
Здравствуйте. Я только начала изучение windows forms и столкнулась со следующей проблемой. Мне нужно, чтобы в функции Main файла...

В каком модуле в python3 находится функция для работы со строками?
ребята, в каком модуле в python3 находится функция для работы со строками?

Как определить в каком файле .lib реализована функция?
Есть один проект. В нем файл .h с прототипами функций и множество .lib-ов, с их реализациями. Я данные функции пытаюсь использовать в...

В каком файле находится код "Облако тегов" в CMS bitrix
Подскажите, пожалуйста, по какой директории находится файлы стандартного &quot;Облака тегов&quot; в движке битрикс... Найти необходимо...

Как указать определения препроцессора непосредственно в файле исходного кода?
3.Как указать определения препроцессора непосредственно в файле исходного кода?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru