Подтвердить что ты не робот

Глобальная переменная в нескольких файлах

У меня есть два исходных файла, которым необходимо получить доступ к общей переменной. Каков наилучший способ сделать это? например:.

source1.cpp:

int global;

int function();

int main()
{
    global=42;
    function();
    return 0;
}

source2.cpp:

int function()
{
    if(global==42)
        return 42;
    return 0;
}

Должно ли объявление переменной global быть статическим, extern или должно быть в файле заголовка, включенном обоими файлами и т.д.?

4b9b3361

Ответ 1

Глобальная переменная должна быть объявлена ​​ extern в файле заголовка, включенном обоими исходными файлами, а затем определена только в одном из этих исходных файлов:

common.h

extern int global;

source1.cpp

#include "common.h"

int global;

int function(); 

int main()
{
    global=42;
    function();
    return 0;
}

source2.cpp

#include "common.h"

int function()
{
    if(global==42)
        return 42;
    return 0;
}

Ответ 2

Вы добавляете "файл заголовка", который описывает интерфейс для модуля source1.cpp:

source1.h

#ifndef SOURCE1_H_
#define SOURCE1_H_

extern int global;

#endif

source2.h

#ifndef SOURCE2_H_
#define SOURCE2_H_

int function();

#endif

и добавьте оператор #include в каждый файл, который использует эту переменную, и (важный), который определяет переменную.

source1.cpp

#include "source1.h"
#include "source2.h"

int global;     

int main()     
{     
    global=42;     
    function();     
    return 0;     
}

source2.cpp

#include "source1.h"
#include "source2.h"

int function()            
{            
    if(global==42)            
        return 42;            
    return 0;            
}

Хотя это необязательно, я предлагаю имя source1.h для файла, чтобы показать, что он описывает публичный интерфейс к модулю source1.cpp. Точно так же source2.h описывает, что доступно публике в source2.cpp.

Ответ 3

В одном файле вы объявляете его как в source1.cpp, во втором объявляете его как

extern int global;

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