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