общие глобальные переменные в C



Как я могу создать глобальные переменные, которые являются общими в C? Если я положил его в файл заголовка, то компоновщик жалуется, что переменные уже определены. Это единственный способ объявить переменную в одном из моих файлов C и вручную ввести externs в верхней части всех других файлов C, которые хотят его использовать? Это звучит не идеально.

675   6  

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 включает в себя файл заголовка с extern in.

Если вы разделяете код между C и C++, не забудьте добавить shared.h file:

#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

    Ничего не найдено.