Cogwheel ответ правильный, но ваш комментарий указывает на некоторую возможность путаницы, поэтому, возможно, лучше уточнить:
file1.h:
#ifndef FILE1_H_INCLUDED
#define FILE1_H_INCLUDED
typedef long ValueGPR;
extern ValueGPR reg[];
#define NUM_REGS 33
#endif
file1.c:
#include "file1.h"
ValueGPR reg[NUM_REGS];
file2.c:
#include "file1.h"
/* ... */
for (i=0; i<NUM_REGS; i++)
show(reg[i]);
Редактировать: Учитывая дополнительный момент, что reg
действительно является членом класса, приведенный выше код явно не будет работать, хотяОбщая идея остается прежней.Для участника класса вам нужно иметь дело с классом в целом, а не только с самим reg
.Взглянув на то, как могут выглядеть , вы можете получить что-то вроде:
file1.h:
// include guard here
class CPU_state {
public:
typedef long ValueGPR;
static const int num_regs = 33;
ValueGPR reg[num_regs];
//or, preferably:
// std::vector<ValueGPR> regs;
// CPU_state() : regs(num_regs) {}
// ...
};
extern CPU_state cpu;
file1.cpp:
#include "file1.h"
CPU_state cpu;
file2.cpp:
#include "file1.h"
for (int i=0; i<cpu.num_regs; i++)
show(cpu.reg[i]);
Если вы можете создать более одного CPU одновременно, то вам, вероятно, нужно будет передать указатель или ссылку на CPU_state (или как вы его называете)это) вместо того, чтобы полагаться на глобальный экземпляр, как этот код использует.