Re: Объявление глобальных переменных в c.
Wladimir Krawtschunowsi -> debian-russian@lists.debian.org @ Fri, 5 May 2006 14:31:58 +0200:
WK> Доброго времени суток!
WK> Извеняюсь за оффтоп, но больше спросить негде.
WK> Проблема в следующем:
WK> Один кусок программы пишется в файле client.c
WK> Для коммуникации в локальной сети к нему посредством
WK> #include "network.h"
WK> привязывается библиотека. В ней должна быть переменная int PORT.
WK> Если я сейчас объявляю в client.c
WK> extern int PORT;
WK> То линкер выплёвывает ошибку на манер - дважды декларированная
WK> переменная. То же самое происходит если в client.c это объявление не
WK> писать. Я так понимаю это мотому, что network.h дважды включается
WK> сначала в network.c и потом в client.c... Применение ifndef не
WK> помогло. Если прописать переменную в network.c а не в network.h то
WK> всё работает. Но по идее при написании client.c, network.c вовсе не
WK> обязан быть доступным, соответсвенно программер не может посмотреть
WK> какие переменные есть в network.c...
WK> Это можно как-нибудь побороть ? Т.е. декларировать переменню в network.h
WK> и чтобы линкер не плевался ?
extern пишется в хедере. А без extern - в .c. Ровно одном. Вероятнее
всего, в network.c.
Но вообще так делать без КРАЙНЕЙ необходимости не рекомендуется. Разве
что у тебя эта переменная - константа.
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru
kernel bug (англ.) - ядрёна вошь
Reply to: