Re: Объявление глобальных переменных в c.
On 05/05/06, Wladimir Krawtschunowsi <krawtschunowski@web.de> wrote:
Доброго времени суток!
Извеняюсь за оффтоп, но больше спросить негде.
Проблема в следующем:
Один кусок программы пишется в файле client.c
Для коммуникации в локальной сети к нему посредством
#include "network.h"
привязывается библиотека. В ней должна быть переменная int PORT.
Если я сейчас объявляю в client.c
extern int PORT;
То линкер выплёвывает ошибку на манер - дважды декларированная
переменная. То же самое происходит если в client.c это объявление не
писать. Я так понимаю это мотому, что network.h дважды включается
сначала в network.c и потом в client.c... Применение ifndef не
помогло. Если прописать переменную в network.c а не в network.h то
всё работает. Но по идее при написании client.c, network.c вовсе не
обязан быть доступным, соответсвенно программер не может посмотреть
какие переменные есть в network.c...
Это можно как-нибудь побороть ? Т.е. декларировать переменню в network.h
и чтобы линкер не плевался ?
Погоди, в чем проблема? По симптомам похоже, что в network.h у тебя
переменная не объявляется (declare), а определяется (define). То есть,
в network.h ты пишешь:
int PORT;
вместо
extern int PORT;
Вот пример как надо:
=== Makefile ===
test: test.o main.o
=============
=== test.h ===
extern int t;
int test();
===========
=== test.c ===
#include "test.h"
int t=0;
int test()
{
return t;
}
===========
=== main.c ===
#include "test.h"
main()
{
t=100;
printf("%d=%d", test(), t);
}
============
--
BR,
Stanislav
Reply to: