Заголовки и несколько источников - PullRequest
0 голосов
/ 20 декабря 2010

Эй. У меня есть это в заголовочном файле:

struct something {
        int a;
        int b;
};
int all[25][9];

Этот заголовочный файл включен во все 3 .c файла, которые есть в моем проекте. Один из файлов (основной файл) имеет основную функцию, а другие имеют функции, которые используются в основном файле. Они также используют переменные, которые объявлены в этом главном файле, используя extern типа variableName. Тем не менее, хотя я объявляю struct something *stuff;, а затем malloc его в основном файле (и эти другие файлы работают с этим stuff напрямую), мой массив all 2d нигде не объявлен, кроме файла заголовка. Я использую этот массив в одном из этих дополнительных .c файлов. Будет ли этот массив all объявлен в каждом из них? Должен ли я сделать это таким образом? Для моих целей крайне важно, чтобы в этом заголовочном файле была ссылка на all. Должен ли я просто объявить all как all[][], а затем присвоить ему размер в файле .c или что-то в этом роде?

Ответы [ 4 ]

3 голосов
/ 20 декабря 2010

Если вы хотите, чтобы несколько исходных файлов имели общий массив с именем all, вы должны объявить

extern int all[25][9];

в шапке и

int all[25][9];

в один из файлов c.

2 голосов
/ 20 декабря 2010

Вы должны , а не сделать это таким образом.Таким способом создается определение all в каждом исходном файле, который включает в себя заголовок, и несколько определений одного и того же объекта недопустимы (на практике вы можете получить отдельный экземпляр all в каждом исходном файле, или они могутвсе ссылаются на один и тот же).

Вместо этого в заголовочный файл помещаются только объявления:

extern int all[25][9];

Затем в один C файл (вероятно, ваш) main"файл, который вы упоминаете), поместите определение:

int all[25][9];
2 голосов
/ 20 декабря 2010

Используйте ключевое слово extern для объявления массива в заголовке:

extern int all[25][9];

Затем создайте его экземпляр только в одном из файлов реализации:

int all[25][9];

Другие файлы C содержат заголовок и могут обращаться к массиву.

0 голосов
/ 20 декабря 2010

В заголовочном файле определите / объявите как

EXT int a;

В главном файле c используйте

#

define EXT  extern
#include <a.h>
#undef EXT

Это позволит избежать отдельного определения / объявления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...