[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: