Как создать глобальные переменные, совместно используемые в C? Если я помещаю его в заголовочный файл, то компоновщик жалуется, что переменные уже определены. Это единственный способ объявить переменную в одном из моих файлов C и вручную положить в extern
в начало всех других файлов C, которые хотят ее использовать? Это звучит не идеально.
Общие глобальные переменные в C
Ответ 1
В файле заголовка напишите его с помощью extern
.
И в глобальном масштабе один из файлов c объявляет его без extern
.
Ответ 2
В одном файле заголовка (shared.h):
extern int this_is_global;
В каждом файле, который вы хотите использовать этот глобальный символ, включите заголовок, содержащий объявление extern:
#include "shared.h"
Чтобы избежать множественных определений компоновщика, только одно объявление вашего глобального символа должно присутствовать в ваших единицах компиляции (например: shared.cpp):
/* shared.cpp */
#include "shared.h"
int this_is_global;
Ответ 3
В файле заголовка
заголовочный файл
#ifndef SHAREFILE_INCLUDED
#define SHAREFILE_INCLUDED
#ifdef MAIN_FILE
int global;
#else
extern int global;
#endif
#endif
В файле с файлом, в котором вы хотите проживать в мире:
#define MAIN_FILE
#include "share.h"
В других файлах, которым нужна внешняя версия:
#include "share.h"
Ответ 4
Вы помещаете объявление в файл заголовка, например.
extern int my_global;
В одном из ваших .c файлов вы определяете его в глобальной области.
int my_global;
Каждый файл .c, который хочет получить доступ к my_global
, включает заголовочный файл с extern
in.
Ответ 5
Если вы используете код между C и С++, не забудьте добавить в файл shared.h
следующее:
#ifdef __cplusplus
extern "C" {
#endif
extern int my_global;
/* other extern declarations ... */
#ifdef __cplusplus
}
#endif
Ответ 6
Существует более чистый способ только с одним файлом заголовка, поэтому его проще поддерживать. В заголовке с глобальными переменными префикс каждого объявления с ключевым словом (я использую общий), то только в одном исходном файле включите его как это
#define common
#include "globals.h"
#undef common
и любые другие исходные файлы, подобные этому
#define common extern
#include "globals.h"
#undef common
Просто убедитесь, что вы не инициализируете какие-либо переменные в файле globals.h, или компоновщик все равно будет жаловаться, поскольку инициализированная переменная не рассматривается как внешняя, даже с ключевым словом extern. Файл global.h похож на этот
#pragma once
common int globala;
common int globalb;
etc.
похоже, работает для любого типа объявления. Не используйте общее ключевое слово на #define, конечно.