Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Создание файла с переменными


Автор: PILOT 13.12.2004, 18:57
Например, в моей задаче было очень удобно имена и объявления выносить в отдельный файл и приклеплять его ко всем файлам которые его используют (я так делал на ассемблере).

И вот, например, есть объединение, которое я бы хотел использовать в более чем одном файле:
Код

union RdUnion1
{
 char  RdReg;
 struct BitStr
 {
   unsigned X1:1;
   unsigned X2:1;  
   unsigned X3:1;
   unsigned X4:1;
   unsigned X5:1;
   unsigned X6:1;  
   unsigned X7:1;
   unsigned X8:1;
 } Bits;
} RdReg1;


Т.е. я бы хотел использовать не само объединение как тип, а именно переменную RdReg1, которая является как бы глобальной... не знаю терминологию. Т.е. видной изо всех файлов... так наверное.

СУВ.


Автор: Goldberg 13.12.2004, 19:03
Ну так в чем проблемма? Объявлешь, и потом инклудишь во все хидеры.

#include "GlobalVariables.h"

Автор: srd 13.12.2004, 19:19
Заголовочный файл my.h
Код

#ifndef __MY__
#define __MY__

union RdUnion1
{
 char  RdReg;
 struct BitStr
 {
   unsigned X1:1;
   unsigned X2:1;  
   unsigned X3:1;
   unsigned X4:1;
   unsigned X5:1;
   unsigned X6:1;  
   unsigned X7:1;
   unsigned X8:1;
 } Bits;
};

// объявляение глобальной переменной.
extern RdUnion1 RdReg1;

#endif

CPP файл my.cpp
Код

#include "my.h"
// определение глобальной переменной
RdUnion1 RdReg1;

После чего включаешь my.h во всех файлах, в которых тебе нужна переменная RdReg1. А просто определять глобальные переменные в заголовках разумеется нельзя.

Автор: PILOT 13.12.2004, 19:47
Т.е. одна переменная на все файлы? с одним и тем же адресом?
И обращаясь затем в любом модуле:
Код

/*** любой файл, например: my2.cpp ***/
#include "my.h"
// определение глобальной переменной
RdUnion1 RdReg1;
...
...

RdReg1=0x10;

я буду обращаться именно к одной и той же которая описана в my.h?
и обязательно нужно будет указать в 3-х местах о RdReg1? (my.h, my.cpp, my2.cpp)

СУВ.

Автор: srd 13.12.2004, 19:56
Нет, переменная определяется только один раз только в одном CPP файле. А в других CPP-файлах она становится доступной благодаря строчке
Код

extern RdUnion1 RdReg1;

которая содержится в my.h

my.h
Код

#ifndef __MY__
#define __MY__

union RdUnion1
{
 char  RdReg;
 struct BitStr
 {
   unsigned X1:1;
   unsigned X2:1;  
   unsigned X3:1;
   unsigned X4:1;
   unsigned X5:1;
   unsigned X6:1;  
   unsigned X7:1;
   unsigned X8:1;
 } Bits;
};

// объявляение глобальной переменной.
extern RdUnion1 RdReg1;

#endif

my.cpp
Код

#include "my.h"
RdUnion1 RdReg1;

my2.cpp
Код

#include "my.h"
void f(void)
{
  RdReg1 = 0;
}

my3.cpp
Код

#include "my.h"
void g(void)
{
 RdReg1 = 1;
}

и т.п.

Автор: PILOT 13.12.2004, 20:23
Эх...
Жаль что в одном месте нельзя сразу все указать...
хидер и его срр становяться неуниверсальными в моем случае...

У меня есть классы. Т.е. если я захотел внести изменение в название класса придется менять все в трех местах, в т.ч. и файлах объявления классов...
А по другому никак нельзя?

Вот в асме было так: в одном месте объявляешь как public и везде использувешь...

СУВ.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)