在编译时设置静态常量值(不是由预处理器)

Krz*_*wek 2 c++ static compilation c++11

只是简短的问题.我可以在编译时使用-Dflag 来定义预处理器变量g++.但有没有办法以这种方式设置常量常量变量的值?

我想避免预处理器.我没有看到任何理由,为什么这是不可能的.

lio*_*ori 7

好吧,您无法从编译器开关定义变量.你可以伪造它:

const int my_cli_defined_variable = MY_CLI_DEFINED_VARIABLE
#undef MY_CLI_DEFINED_VARIABLE
Run Code Online (Sandbox Code Playgroud)

然后:

g++ -DMY_CLI_DEFINED_VARIABLE=5 …
Run Code Online (Sandbox Code Playgroud)

第二行将确保您的实际代码不会意外使用预处理器宏,因为宏将不再存在.因此,使用此CLI定义变量的唯一方法是通过const变量以类型安全的方式.

一个完整的例子,它解决了未定义宏时的情况:

const int my_cli_defined_variable = 
#ifdef MY_CLI_DEFINED_VARIABLE
    MY_CLI_DEFINED_VARIABLE;
#undef MY_CLI_DEFINED_VARIABLE
#else
    42;
#endif
Run Code Online (Sandbox Code Playgroud)