Дублирующее определение структуры в другом исходном файле - PullRequest
1 голос
/ 22 июня 2010

foo.c

struct foo {
  int a;
};

bar.c

struct foo {
   char *s; 
   double x,y;
};

Определения структуры находятся только в файлах .c. Законно ли это в соответствии со стандартом C? Какая часть стандарта говорит так? Изменить: нет # включения определения структуры.

Спасибо всем за быстрый ответ! : D

Ответы [ 3 ]

6 голосов
/ 22 июня 2010

Раздел 6.2.1-4 стандарта C99 указывает на то, что это допустимо, поскольку оба они объявлены в разных областях (каждый из которых имеет область действия файла, простирающуюся от их определения до конца единицы перевода, т.е. файл).

6 голосов
/ 22 июня 2010

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

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

Нечто подобное было бы недопустимо в C ++, поскольку C ++ распространяет понятие linkage на классы и нелокально в C ++.классы всегда имеют внешнюю связь.

1 голос
/ 22 июня 2010

Если они не «знают» друг друга (то есть через #include или что-то еще), это не должно быть проблемой.Если они это сделают, вы можете взглянуть на Как разрешить две структуры с одинаковым именем? .

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