如何使__COUNTER__在不同的cpp文件中生成相同的值

how to make __COUNTER__ to generate the same value across different cpp files

本文关键字:文件 cpp 何使 COUNTER      更新时间:2023-10-16

我正在使用预定义的__COUNTER__宏来定义我的类型。但是,如果我从main.cpp访问变量sval1,它将获得与从test.cpp访问不同的__COUNTER__值。

如何确保在所有.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

单个源文件应该包含变量的实际声明(以及任何所需的初始化)。

计数器.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