90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
|
1 | |
В каком файле исходного кода находится функция main?03.08.2016, 18:02. Показов 3153. Ответов 19
Метки нет (Все метки)
0
|
03.08.2016, 18:02 | |
Ответы с готовыми решениями:
19
В каком файле находится форма комментариев? В каком заголовочном файле находится delay (BCB6)? Как мне узнать по классу в каком файле.h он находится? Нужно, чтобы в функции Main файла исходного кода происходил запуск обработки формы |
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
03.08.2016, 18:16 | 3 |
Вопрос был не «где находится точка входа», а «где находится функция main».
JIawliet, какая задача решается?
1
|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
||||||
03.08.2016, 18:20 [ТС] | 4 | |||||
ну тогда немножко исправим вопрос: можно ли определить в каком файле находится функция с определенным именем?
Добавлено через 4 минуты 0x10, да вот думаю как происходит раздельная компиляция объектов std::cin, std::cout... я так понял определяются они один раз в одном файле исходного кода, но тогда как во всех других файлах они только объявляются??? должна быть какая-то конструкция по типу:
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
03.08.2016, 18:21 | 5 |
нельзя.
нельзя. но если оч сильно хочется, вы всегда можете написать функцию, которая будет отправлять вам по электронной почте собственное месторасположение.
1
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|||||||||||
03.08.2016, 19:00 | 6 | ||||||||||
В моем случае в файле iostream:
1
|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
||||||
03.08.2016, 19:06 [ТС] | 7 | |||||
0x10, ну вот, я так понял это хэдер <iostream>? ок, объявления то есть, а определение где?) и как в случаи определения в одном файле исходного кода не происходит переопределения в другом???
Добавлено через 2 минуты Мы ж в коде не пишем нечто:
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
03.08.2016, 19:15 | 8 |
Пишем hello, world, компилируем, смотрим, с чем слинковано:
Код
$ 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) Код
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc221482000) Код
$ nm -D /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep cin 0000000000308a80 B _ZSt3cin Код
$ c++filt _ZSt3cin std::cin
1
|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
|
03.08.2016, 20:01 [ТС] | 9 |
0x10, хочу кое-что прояснить))) объекты cin, cout создаются в единственном экземпляре на все файлы исходного кода? если да, то я до сих пор не понимаю, почему не происходит переопределение в разных файлах исходного кода одного проекта???
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
03.08.2016, 20:06 | 10 |
После компиляции нет файлов исходного кода. Есть результирующая сборка. В ней объекты должны иметь не более одного определения.
По факту других определений нет. В заголовочные файлы уже смотрели: там только объявления.
1
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
03.08.2016, 20:20 | 12 |
Если эта информация и остается то только в debug info. Если прога скомпилированна под дебаг чисто теоритически эту инфу можно найти и распарсить.
0
|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
|||||||||||
03.08.2016, 21:07 [ТС] | 13 | ||||||||||
0x10, мы немного друг друга не понимаем... вот наглядный пример: есть класс, нужно чтоб объект этого класса был в глобальной области и виден из 2 файлов исходного кода.. мы пишем:
0
|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
|||||||||||||||||||||||||||||||
03.08.2016, 22:36 [ТС] | 15 | ||||||||||||||||||||||||||||||
создаем .cpp, подключаем <iostream>, пишем простой "hello word" - в <iostream> только объявления cin / cout / cerr / clog, где-то дальше в дебрях хэдеров создаются эти объекты... все ок, все счастливы... создаем два .cpp, подключаем к каждому <iostream>, и в первом и во втором файле пользуемся cin / cout: в каком-то из файлов, но только в одном, создаются объекты cin / cout / и т.д. (так как extern присутствует во втором файле все ок, все счастливы)... - нет! во втором файле мы снова идем в дебри хэдеров и на тыкаемся на проверку, которая говорит, что объект уже создан! я не знаю как еще объяснить... давайте парочку примеров: Пример 1:
Пример 2:
НЕТ! все плохо, мы явно определяем SomeObject в first.cpp, что касается объектов cin / cout - мы никогда их явно не определяем, они определяются в глубинах хэдеров... А посему там (в хэдерах) происходит какая-то проверка, на то, созданы эти объекты или нет, и я спрашивал все это время именно о этой проверке
0
|
Неэпический
|
|
03.08.2016, 22:41 | 16 |
Не в хедерах, а где-то в библиотеках компилятора.
В заголовках лишь объявление, но нет определения. Так что да - Вы их не определяете, они уже определены где-то разработчиками компилятора. Вы же когда вызываете какую-то библиотечную функцию не задаетесь вопросом где она определена? А почему? Почему Вы остановились на объектах?
1
|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
|||||||||||||||||||||
03.08.2016, 22:56 [ТС] | 17 | ||||||||||||||||||||
Croessmah,
Это грубо говоря выглядит как-то так?:
0
|
Неэпический
|
|||||||||||
04.08.2016, 00:32 | 18 | ||||||||||
Сообщение было отмечено JIawliet как решение
Решение
Да, но всё может быть несколько сложнее.
Из исходников GCC 6:
1
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
04.08.2016, 04:11 | 19 |
Уже было явно сказано, но повторю: объявления — в библиотеке. В восьмом посте было показано, что в моем случае это libstdc++.so.6.
1
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
04.08.2016, 04:53 | 20 |
Ну и? Все имена которые есть в каждом юните трансляции помещаются в объектный файл, в табличку соответствия имен адресам, и табличку какие имена запрошены при обращении к extern функциям и переменным. Линкер сшивает первые таблички, при коллизиях жутко ругается трехэтажным матом (если конечно это не статик-поля члены шаблонов). Потом начинает заполнять то что нужно по второй таблице из первой. если там чего то не хватает ругается вообще девятиэтажным матом. Если ничего не столкнулось и все нашлось получилась exe в которой таблиц имен уже нет.
Добавлено через 15 минут Так что если где то в EXE имена функций а тем более имена файлов исходников де то остались, то это debug info если она туда влинкована. Но опять же сомнительно что в debug info есть имена функций, для дебага достаточно имен файлов и номеров строк.
0
|
04.08.2016, 04:53 | |
04.08.2016, 04:53 | |
Помогаю со студенческими работами здесь
20
В каком модуле в python3 находится функция для работы со строками? Как определить в каком файле .lib реализована функция? В каком файле находится код "Облако тегов" в CMS bitrix Как указать определения препроцессора непосредственно в файле исходного кода? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |