LINUX.ORG.RU

вроде так:
---- file1.c -----
...
int a;
...
------------------

---- file2.c -----
...
extern int a;
...
------------------

anonymous
()

для этого придуманы дефайны, хедеры, и вообще: зачем для 2-х файлов /логических единиц компиляции/ нужны общие данные такого характера?

Pi ★★★★★
()
Ответ на: комментарий от anonymous

или так:
---- file1.c -----
...
int a;
...
------------------

-- globalvars.h --
...
extern int a;
...
------------------

Murr ★★
()

2bobych:

Правильный ответ дал Murr.

Если переменная действительно глобальная, то она должна быть описана в одном месте (хедере), иначе потом заколебешься ее руками в сотне файлов набивать.

Die-Hard ★★★★★
()
Ответ на: комментарий от murla

Ну вариант с глобальными переменными мне кажется наиболее простым способом хранения ряда настроек, которые получает программа при инициализации.

bobych
() автор топика
Ответ на: комментарий от bobych

bobych (16.01.2005 18:06:51):

> ...вариант с глобальными переменными мне кажется наиболее простым способом хранения ряда настроек, которые получает программа при инициализации.

Правильно, все так делают.

Когда советуют избегать использования глобальных переменных, обычно подразумевают -- "без необходимости". Однако, подобные советы, особенно исходящие от авторитетов, часто воспринимаются как догмы.

Один совет -- извини, если покажется банальным -- все глобальные идентификаторы как-то выделять в духе Венгерской нотации. Например, начинать их с префикса g_. И в хидере (где прописаны extern...) в комментариях указывать всю информацию про переменную, e.g., имя файла, для чего она нужна, как инициализируется, etc.

Другой прием -- собрать все глобальные переменные в одну или несколько структур. Лично мне он не нравится, но многие так делают. Преимущество такого подхода -- легко контролировать разделение переменных между не всеми файлами, а группами файлов, и семантика может быть идентифицирована названием структуры/переменной.

Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.