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

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: