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



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



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, или оно должно быть в заголовочном файле, включенном обоими файлами и т. д.?

405   3  
c++

3 ответов:

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

общие.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;
}

вы добавляете "файл заголовка", который описывает интерфейс к модулю 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.СРР. Таким же образом source2.h описывает то, что является общедоступным в source2.СРР.

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

extern int global;

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

Comments

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