|
|
  |
Вопросы по C от ламера, В книжках ответа чёта не нахожу |
|
|
|
Apr 23 2009, 15:09
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(Скопидор @ Apr 23 2009, 16:51)  А если он не вставляет содержимое системного файла в наш исходник, то почему компилятор не ругается "undefined variable" если мы юзаем переменные из системного файла? А тогда зачем вообще писать, к примеру, #include <iostream> если препроцессор всё равно не подставляет код из этого библиотечного файла в наш исходник? В h-файлах обычно определяются константы, макросы, предварительные объявления функций и ссылки на переменные. То есть, если вы используете в тексте переменные или функции из других модулей, то они должны быть объявлены до использования. Переменные - как extern, функции - как предварительное описание. Например, встретив в тексте описание viod SomeFunc(); компилятор будет спокойно воспринимать вызовы этой функции, подразумевая, что она более подробно описана в другом месте (в другом модуле, библиотеке, а может быть, в текущем, но ниже)
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
Guest_Скопидор_*
|
Apr 23 2009, 15:18
|
Guests

|
Цитата(MrYuran @ Apr 23 2009, 19:09)  В h-файлах обычно определяются константы, макросы, предварительные объявления функций и ссылки на переменные. Да какая разница что там описано в этих h-файлах (а, кстати, где Вы увидели h в приведённой мной выше строке #include <iostream> ?) если Вы сами же пишите:Цитата(MrYuran @ Apr 23 2009, 16:27)  Код из библиотек не подставляется при компиляции, а линкуется при конечной сборке. Из чего следует, что содержимое этих "h-файлов"не добавляется препроцессором в наш исходник
Сообщение отредактировал Скопидор - Apr 23 2009, 15:23
|
|
|
|
|
Apr 23 2009, 15:38
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Все что имеется в h-файлах и не отключается командами препроцессора типа #if, #ifdef включается в исходник и далее компилируется. Что вам в этом процессе не понятно? Вам надо разобраться с книгой в руках, что такое объявление переменных, функций, классов, и что такое их определение. Например, здесь можно почитатъ : http://it-library.org/articles/?c=6&&a=139. Каша у вас в голове на сегодняшний день. "Любите книгу - источник знаний"
|
|
|
|
|
Apr 23 2009, 16:57
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(Скопидор @ Apr 23 2009, 19:18)  Из чего следует, что содержимое этих "h-файлов"не добавляется препроцессором в наш исходник содержимое "этих h-файлов" используется компилятором для формирования ссылок на внешние переменные и функции, которые затем цепляются линкером. При этом в объектный код компилируемого модуля никакой дополнительный код из внешних модулей не вставляется. Короче, учите матчасть. Лучше всего взять конкретный исходник (желательно грамотно написанный) и разобрать его по косточкам.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
Guest_Скопидор_*
|
Apr 23 2009, 17:36
|
Guests

|
Цитата(sergeeff @ Apr 23 2009, 19:38)  Вам надо разобраться с книгой в руках.... Каша у вас в голове на сегодняшний день. "Любите книгу - источник знаний" Цитата(MrYuran @ Apr 23 2009, 20:57)  Короче, учите матчасть. "P.S. Модераторы и гуру, вы реально помогайте людям кто вообще не в теме, ведб вы когда-то тоже были лохами в программинге, и вас когда-то тоже пинали, мол зелень читай больше книжки. Ведь неприятно? Люди не просят книг, а просят реальной помощи"©-Цитата(Denis89 @ Apr 10 2009, 23:56) //////////////////////////////////////////// Цитата(sergeeff @ Apr 23 2009, 19:38)  Все что имеется в h-файлах и не отключается командами препроцессора типа #if, #ifdef включается в исходник и далее компилируется. Что вам в этом процессе не понятно? Непонятно вот это:Цитата(MrYuran @ Apr 23 2009, 16:27)  Код из библиотек не подставляется при компиляции, а линкуется при конечной сборке.
Сообщение отредактировал Скопидор - Apr 23 2009, 17:38
|
|
|
|
Guest_Скопидор_*
|
Apr 23 2009, 18:31
|
Guests

|
Цитата(SysRq @ Apr 23 2009, 21:42)  Скопидор, уймитесь с форматированием. Весеннее обостение что ли?! Да блин, достало. Вместо того, чтобы конкретно разъяснить начинают отвечать в стиле "RTFM" или "учи матчасть". Говорите не интересно стало? Но я же даже в названии темы написал, что вопросы от ламера. Вот и пришлось это напомнить а также то, что и отвечающие когда-то тоже были ламерами. P.S. А зря не хотите ответы. Ваши ответы мне нравились больше всего своей конкретностью, что всё "фтему". Ну не хотите и не надо. Просто не понимаю, почему если человек знает ответ на вопрос почему бы и не ответить? Из-за вредности?
Причина редактирования: Нарушение п.3.3 и 3.4 Правил форума.
|
|
|
|
|
Apr 23 2009, 18:46
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Скопидор @ Apr 23 2009, 22:31)  Да блин, достало. Вместо того, чтобы конкретно разъяснить начинают отвечать в стиле "RTFM" или "учи матчасть". Говорите не интересно стало? Но я же даже в названии темы написал, что вопросы от ламера. Вот и пришлось это напомнить а также то, что и отвечающие когда-то тоже были ламерами.
P.S. А зря не хотите ответы. Ваши ответы мне нравились больше всего своей конкретностью, что всё "фтему". Ну не хотите и не надо. Просто не понимаю, почему если человек знает ответ на вопрос почему бы и не ответить? Из-за вредности? up Патаму-чта Вы в самом начале сказали что ответов в книжках не нашли, но все остальные то нашли... По раздельной компиляции, все С(С++) файлы(исходники) собираются отдельно, #include "..." #include <...> обычно означает включить объявления а не определения переменных и функций (исключения конечно есть, но пока это не Ваш случай) если Вы включаете по include просто С код, то тогда это просто разбиение кода на несколько файлов, это дурной тон, но иногда делают и так... .h(.hpp) файлы библиотек(iostream например) для того и нужны чтоб правильно прилинковать библиотеки и указать на глобальныее переменные/вызовы функций которые там реализованны. Так что раздельная компиляция это совсем не миф...  более того, это просто СТАНДАРТ.
|
|
|
|
|
Apr 23 2009, 18:57
|
Частый гость
 
Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930

|
Цитата(Скопидор @ Apr 24 2009, 00:31)  Непонятно вот это:
Цитата(MrYuran @ Apr 23 2009, 16:27) Код из библиотек не подставляется при компиляции, а линкуется при конечной сборке. А что не понятно? Код в библиотеке уже откомпилирован, т.е. он уже "готовый" (переведён в коды, понятные процессору). Поэтому он линкуется, т.е. присоединяется где надо при сборке.
|
|
|
|
|
Apr 23 2009, 19:02
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(Скопидор @ Apr 23 2009, 21:31)  Да блин, достало. Вместо того, чтобы конкретно разъяснить начинают отвечать в стиле "RTFM" или "учи матчасть". Говорите не интересно стало? Но я же даже в названии темы написал, что вопросы от ламера. Вот и пришлось это напомнить а также то, что и отвечающие когда-то тоже были ламерами.
P.S. А зря не хотите ответы. Ваши ответы мне нравились больше всего своей конкретностью, что всё "фтему". Ну не хотите и не надо. Просто не понимаю, почему если человек знает ответ на вопрос почему бы и не ответить? Из-за вредности? По-моему десять человек вам уже разъясняли, что к чему. Пояснения уже пошли по второму кругу. Вы внятно скажите, что не понятно. А то вопли молодежи "Не понятно!!!!!!" слегка начинают доставать своей нагловатостью.
|
|
|
|
Guest_Скопидор_*
|
Apr 23 2009, 19:34
|
Guests

|
Цитата(singlskv @ Apr 23 2009, 22:46)  Патаму-чта Вы в самом начале сказали что ответов в книжках не нашли… Да не нашёл. Пока не нашёл. Не исключаю, что плохо искал. Также не исключаю, что могу найти ответы на все свои вопросы в книжках. Но сколько время на это уйдёт? Ведь не секрет, что хороший наставник сможет научить человека тому, что знает гораздо быстрей, чем если человек будет осваивать это самостоятельно идя методом проб и ошибок. Цитата(singlskv @ Apr 23 2009, 22:46)  … но все остальные то нашли... Ещё не факт, что именно в книжках. Возможно, спросили у коллег в реале или на каком-нибудь форуме. Повторяю, я ламер в C++, поэтому мои вопросы кому-то кажутся глупыми и раздражают. Я скажу этим товарищам: вспомните, что и вы когда-то были полным лузером и не осуждайте.
|
|
|
|
Guest_Скопидор_*
|
Apr 23 2009, 19:43
|
Guests

|
Цитата(singlskv @ Apr 23 2009, 22:46)  По раздельной компиляции, все С(С++) файлы(исходники) собираются отдельно Собираются в смысле компилируются (“Build”)? А где описываются «задание» компилятору, т.е. перечень CPP-файлов, подлежащих компиляции? В Makefile?
|
|
|
|
|
Apr 23 2009, 19:48
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Скопидор @ Apr 23 2009, 23:34)  Ещё не факт, что именно в книжках. Возможно, спросили у коллег в реале или на каком-нибудь форуме.
Повторяю, я ламер в C++, поэтому мои вопросы кому-то кажутся глупыми и раздражают. Я скажу этим товарищам: вспомните, что и вы когда-то были полным лузером и не осуждайте. Раздражение здесь может быть только от одного, многим видно, что Вы не сделали и десятой доли усилий, чтоб это познать самому без посторонней помощи... Сделайте усилие над собой, а потом задавайте вопросы... и тогда Вам с удовольствием помогут.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|