ошибка связывания: множественные определения глобальных переменных - PullRequest
0 голосов
/ 20 ноября 2011

Я использую gcc для компиляции ряда .c файлов. Скажем так:

Файлы C:

main.c 
tree.c

заголовочный файл:

 tree.h

Я объявил некоторые глобальные переменные в tree.h. Допустим, что следующим является глобальная переменная с присвоенным значением:

 int fanout = 5;

Ранее я сохранил функцию main() в файле tree.c . И не было никаких проблем в связывании. Но теперь я хочу отделить основную функцию. Я только что переместил основную функцию во вновь созданный файл .c. Теперь проблема в том, что показывает ошибку связи:

 main.o error: fanout declared first time
 tree.o error: multiple declaration of fanout.

Пожалуйста, дайте мне знать, как я могу избавиться от этой проблемы.

Заранее спасибо.

1 Ответ

3 голосов
/ 20 ноября 2011

Когда вы включаете заголовочный файл, который объявляет и определяет int fanout в нескольких исходных файлах, вы нарушаете Одно правило определения .
Согласно ODR, может быть только одно определение переменнойв одной единице перевода (Заголовочные файлы + исходный файл).
Чтобы избежать этого,
Вам необходимо использовать ключевое слово extern.Три простых шага:

  • Объявление переменной extern

В tree.h:

extern int fanout;   
  • Определение переменной

Определите переменную в одном из файлов c (tree.c).

#include "tree.h"   
extern int fanout = 5;
  • Используйте переменную

Затем включите tree.h в любом исходном файле, к которому вы хотите получить доступ fanout.

В main.c:

#include "tree.h"
int main()
{
    fanout = 10;
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...