Re: Объявление глобаль ных переменных в c.

2006-05-06 Пенетрантность Wladimir Krawtschunowsi
On Sat, May 06, 2006 at 10:37 +0400, Stanislav Maslovski wrote:
 Погоди, в чем проблема? По симптомам похоже, что в 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);
 }
 


Спасибо - уже работает - так оно оказывается и лечится - просто до
этого был маленький опыт работы с глобальными переменными. Думал, что
если напишу в network.h int Port; то всё будет работать.


signature.asc
Description: Digital signature


Re: Объявление глобаль ных переменных в c.

2006-05-05 Пенетрантность Wladimir Krawtschunowsi
On Fri, May 05, 2006 at 17:21 +0400, Artem Chuprina wrote:
 extern пишется в хедере.  А без extern - в .c.  Ровно одном.  Вероятнее
 всего, в network.c.

Благодарю - заработало. Если подумать, то в принципе даже логично ;)

 Но вообще так делать без КРАЙНЕЙ необходимости не рекомендуется.  Разве
 что у тебя эта переменная - константа.

Переменная костанта(каламбур). Просто ещё один человек пишет server и
ему почему-то сильно не понравилось, когда я прописал порт через
define. Аргументацию я так и не понял...


signature.asc
Description: Digital signature


Re: Объявление глобаль ных переменных в c.

2006-05-05 Пенетрантность Wladimir Krawtschunowsi
On Fri, May 05, 2006 at 23:00 +0200, Anton Petrusevich wrote:
 On Friday 05 May 2006 15:21, Artem Chuprina wrote:
  Но вообще так делать без КРАЙНЕЙ необходимости не рекомендуется.  Разве
  что у тебя эта переменная - константа.
 
 Это ещё почему? КРАЙНЯЯ необходимость может быть продиктована просто 
 некоторым удобством решения конкретной задачи, мы ж не знаем что там за 
 задача. А про религиозное в программе не должно быть глобальных переменных 
 лучше не надо. Меня, например, напрягает передавать каждому объекту ссылку на 
 объект, который ведёт лог программы.

Ну здесь в принципе вопрос в здравом смысле. Чем меньше этих
переменных будет, тем лучше. Особенно если это не константа, и какая-то
функция догадается её поменять не сговариваясь с осталными, то ошибку
потом можно искать годами Но это не должно делать из глобальных 
переменных табу. Кое-где они действительно очень удобны, если код не вылазиет
за рамки двух трёх тысяч строк.


signature.asc
Description: Digital signature