C++ 编译时常量对于每个编译的二进制文件可以有不同的值吗?

问题描述 投票:0回答:1

假设我的整个存储库依赖于编译时常量:

// consts.h
constexpr int MAGIC_CONST = 10;

然后我可以在我的主要功能中使用它:

// main.cpp
int main(int argc, char** argv) {
  // use MAGIC_CONST to do something:
  double data[MAGIC_CONST];
}

现在,假设我想编译这个 main 的几个“实例”:

main_1.cpp
main_2.cpp
,...,每个都有不同的
MAGIC_CONST
。我该怎么做呢?因为
MAGIC_CONST
是在标头中定义的,并且对于整个代码库而不是每个二进制文件都是唯一的。

我也(笨拙地)尝试过像这样使用 extern const :

// consts.h
extern const int MAGIC_CONST; // declaration only

然后在每个main中定义它的实际值:

// main_0.cpp
extern const int MAGIC_CONST = 10;

int main(int argc, char** argv) {
  double data[MAGIC_CONST];
}

这也不起作用,因为

extern const
不是编译时常量。

我也考虑过旧式

#define
,但实际上我也需要在代码库的其他地方使用我的
MAGIC_CONST
,而不仅仅是在
main_0.cpp
中。

任何帮助表示赞赏!

c++ constants
1个回答
0
投票

编译时使用

-D
怎么样?

#include <stdio.h>

int main() {
    printf("%d\n", MAGIC_CONST);
    return 0;
}

结果:

PS F:\OtherApps\Program\VsCode\Code> g++ main.cpp -D MAGIC_CONST=1 -o main_1.exe
PS F:\OtherApps\Program\VsCode\Code> ./main_1.exe
1
PS F:\OtherApps\Program\VsCode\Code> g++ main.cpp -D MAGIC_CONST=2 -o main_2.exe
PS F:\OtherApps\Program\VsCode\Code> ./main_2.exe
2
PS F:\OtherApps\Program\VsCode\Code>

您还可以编写脚本或

.bat
来编译不同的可执行二进制文件

© www.soinside.com 2019 - 2024. All rights reserved.