Могу ли я использовать объявление функции extern в заголовке C, который также используется для исходного файла C, который содержит определение функции? - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть следующий исходный код в C89:

рутинная_a. c:

struct DataRoutineA routineA(int a, int b) {
  struct DataRoutineA data = (struct DataRoutineA *) malloc(sizeof(DataRoutineA));
  data.a = a;
  data.b = b;
  return data;
}

и следующий файл заголовка:

рутинная_a.h :

struct DataRoutineA {
  int a;
  int b;
};

extern struct DataRoutineA routineA(int a, int b);

Цель routine_a.h состоит в том, чтобы его можно было использовать в качестве заголовка для других файлов исходного кода. Следовательно, структура определена, а также определение внешней функции. В этом случае я понимаю, что заголовок определен правильно.

Однако что произойдет с предложением extern, если этот заголовок также используется для routine_a.c? Какой был способ исправить это в ANSI C / C89? Нужны ли мне два разных заголовка для этого случая?

1 Ответ

2 голосов
/ 10 февраля 2020

Все функции в C по умолчанию являются внешними. Таким образом, нет никакой разницы между

extern struct DataRoutineA routineA(int a, int b);

и

struct DataRoutineA routineA(int a, int b);

Вам необходим ключ extern при объявлении прототипов функций вообще.

...