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

 
 
> Как подключаются h и с файлы, Чтото не все понятно.
Serega Doc
сообщение Oct 20 2005, 14:00
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 267
Регистрация: 11-11-04
Из: Одесса
Пользователь №: 1 103



Есть main.c и proc.c
в const.h объявляю константы и дефайны

в proc.c выненсены процедуры которые используются в main.c

в proc.c используются константы из const.h

получается что строка
#includ "const.h"
проходит два раза и в main.c и в proc.c.
Как избавится от ошибки.
Компилятор ICC v7
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GrayCat
сообщение Oct 21 2005, 06:03
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 7-10-05
Из: UA
Пользователь №: 9 342



Цитата(Serega Doc @ Oct 20 2005, 16:00)
Есть main.c и proc.c
в const.h объявляю константы и дефайны
*

Что понимается под "константами" в const.h? Если собственно объявление и инициализация констант, типа
Код
// in "const.h":
const int SomeConst=0x55AA;
то конечно линкер будет ругаться, т.к. при сборке окажется что SomeConst определена во всех файлах, куда включен const.h.

Более правильно объявить константу в хедере:
Код
// in "const.h":
extern const int SomeConst;
а определить и инициализировать ее в одном из *.C-файлов:
Код
// in "proc.c":
const int SomeConst=0x55AA;
Тогда компилятор при компиляции всех файлов, куда включен const.h, будет знать, что SomeConst где-то определено, будет знать его тип, а собственно память под SomeConst выделит только в proc.c. А линкер уже потом разберется что к чему, и ссылки на SomeConst из всех объектников привяжет к единому месту.

Вообще, есть такое общее правило: в заголовочных файлах *.h помещать только объявления, т.е. то, что не порождает код и не вызывает выделения памяти.


--------------------
Gray©at
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Serega Doc   Как подключаются h и с файлы   Oct 20 2005, 14:00
- - beer_warrior   Так называемый защитный код: в .h файле #ifndef ...   Oct 20 2005, 14:14
- - damir2   Оставь один раз #includ "const.h" в mai...   Oct 20 2005, 14:15
- - rezident   1. Используйте условную компиляцию. Т.е. конструкц...   Oct 20 2005, 20:19
- - haker_fox   #ifndef CONST_H //если константа не определена, то...   Oct 20 2005, 23:26
|- - IgorKossak   Цитата(GrayCat @ Oct 21 2005, 09:03)...Вообще...   Oct 24 2005, 06:50
|- - GrayCat   Цитата(IgorKossak @ Oct 24 2005, 08:50)Цитата...   Oct 24 2005, 07:33
|- - IgorKossak   Цитата(GrayCat @ Oct 24 2005, 10:33)Насколько...   Oct 24 2005, 07:44
- - IgorKossak   Никто почему-то не расскажет ещё об одной технике ...   Oct 24 2005, 07:55
|- - Old1   Цитата(IgorKossak @ Oct 24 2005, 10:55)Никто ...   Oct 25 2005, 17:35
|- - -Tумблер-   Цитата(Old1 @ Oct 25 2005, 20:35)Здесь ИМХО о...   Oct 26 2005, 12:33
- - rezident   IgorKossak, понятно что это можно, но для чего это...   Oct 24 2005, 14:55
|- - GrayCat   Цитата(rezident @ Oct 24 2005, 16:55)IgorKoss...   Oct 25 2005, 07:02
- - IgorKossak   Нет, правильно всё-такиКод#ifdef _xxx_DEF т. к. ко...   Oct 26 2005, 14:45


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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 10:08
Рейтинг@Mail.ru


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