我使用predefined __COUNTER__
macro来定义我的类型。但是,如果我从main.cpp访问变量sval1
,它将获得与从test.cpp访问它时不同的__COUNTER__
值。
如何确保在所有.cpp文件中生成__COUNTER__
的相同值?
template <class TYPE, DWORD CRYPT_KEY>
class SVar;
struct t_teststruct
{
SVar<type, __COUNTER__> sval1;
}
答案 0 :(得分:0)
最佳做法是在每个需要访问该变量的源文件(.cpp)中包含头文件(.h)。头文件应将计数器声明为extern
。
#ifndef COUNTER_H
#define COUNTER_H
extern int __COUNTER__;
#endif
单个源文件应包含变量的实际声明(以及任何所需的初始化)。
#include "counter.h"
int __COUNTER__ = 0;
#include "counter.h"
int main() {
// etc.
return 0;
}
#include "counter.h"
struct t_teststruct
{
SVar<type, __COUNTER__> sval1;
}
// etc.
每个源文件都应单独编译。然后,最终的可执行文件可以链接到counter
目标文件:
g++ -o test.exe main.o test.o counter.o