реклама на сайте
подробности

 
 
> Прозрачность программы для компилятора, Почему иногда приходится обьявлять одни и теже инклюды
Waso
сообщение Oct 30 2007, 11:43
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 268
Регистрация: 4-11-05
Пользователь №: 10 470



Насколько я понимаю, инклюд, обьявленный в начале файла должен быть виден во всех последующих инклюдах программы. Согласно Кернигану и Риччи, предпроцессор заменяет директиву #include на содержимое файла, на который она указывает. Однако в ИАРе для успешной компиляции некоторые инклюды приходится втыкать чуть ли не в каждый файл проекта. Плюс к тому, с-шные файлы вообще не участвуют в инклюдах, а обращение к их функциям происходит через прототипы функций одноименных хедеров. Нестыковочка.

Подскажите пожалуйста, как можно избавиться от сабжевой проблемы, в чем могут быть ее причины? Общие ответы типа "в кривости кода" - не в счет.


PS Пользую IAR EWARM 4.40A
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
IgorKossak
сообщение Oct 30 2007, 12:08
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Проблема не в кривости кода а в недопонимании.
Во первых, как Вы правильно сказали
Цитата
предпроцессор заменяет директиву #include на содержимое файла
, но это в том файле, где этот include стоИт. С какой стати он должен быть виден в других файлах проекта, где Вы его ставить не желаете?
Компилятор в каждый момент времени работает только с одним С/С++ файлом проекта и учитывает только входящие в него include. Нестыковки здесь нет.
Во вторых, если в файле несколько include, то каждый последующий видит содержимое предыдущих, но не наоборот, и это логично. Таким образом получается возможная зависимость от порядка. Чтобы её избежать применяются различные ходы вроде включения include в хедеры (и это тоже логично, поскольку есть некоторые зависимости), при этом все хедеры должны иметь охранные директивы, о чём многократно писалось на форуме.

PS Как всегда, не успел за Сергеем Борщом wink.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Waso   Прозрачность программы для компилятора   Oct 30 2007, 11:43
- - Сергей Борщ   Цитата(Waso @ Oct 30 2007, 14:43) Однако ...   Oct 30 2007, 12:03
- - alexander55   Цитата(Waso @ Oct 30 2007, 14:43) Кроме ...   Oct 30 2007, 12:16
|- - Andy Mozzhevilov   Цитата(alexander55 @ Oct 30 2007, 17:16) ...   Oct 31 2007, 04:50
|- - alexander55   Цитата(Andy Mozzhevilov @ Oct 31 2007, 07...   Oct 31 2007, 05:58
- - Waso   Благодарю. Начинает доходить. Значит любой с-...   Oct 30 2007, 12:36
|- - dxp   Цитата(Waso @ Oct 30 2007, 18:36) Значит ...   Oct 30 2007, 12:41
|- - alexander55   Цитата(Waso @ Oct 30 2007, 15:36) alexand...   Oct 30 2007, 12:50
|- - ig_z   Цитата(Waso @ Oct 30 2007, 16:36) alexand...   Oct 30 2007, 13:37
||- - alexander55   Цитата(ig_z @ Oct 30 2007, 16:37) Отличну...   Oct 30 2007, 13:52
|- - scifi   Цитата(Waso @ Oct 30 2007, 15:36) отлична...   Oct 30 2007, 14:21
|- - alexander55   Цитата(scifi @ Oct 30 2007, 17:21) Полезн...   Oct 30 2007, 14:33
- - Непомнящий Евгений   Полностью присоединяюсь к Andy Mozzhevilov - избыт...   Oct 31 2007, 05:42
- - Waso   Линкер выдает такую ошибку: КодError[e27]...   Nov 2 2007, 09:28
|- - Сергей Борщ   Цитата(Waso @ Nov 2 2007, 12:28) В обоих ...   Nov 2 2007, 09:48
|- - VladislavS   Цитата(Waso @ Nov 2 2007, 12:28) Охранные...   Nov 2 2007, 17:41
|- - Николай Z   Цитата(Waso @ Nov 2 2007, 12:28) Линкер в...   Nov 4 2007, 18:52
- - Waso   Видимо проблема в том что компилятор умничает и иг...   Nov 8 2007, 11:45
|- - Сергей Борщ   Цитата(Waso @ Nov 8 2007, 13:45) Еще мале...   Nov 8 2007, 12:14
- - Waso   Спасибо. Просто у меня после паскалевских Ctrl-Shi...   Nov 13 2007, 11:08
- - Сергей Борщ   Цитата(Waso @ Nov 13 2007, 13:08) Еще воп...   Nov 13 2007, 12:40


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 10:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01397 секунд с 7
ELECTRONIX ©2004-2016