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