我正在考虑使用全局常量结构来管理某些子系统的配置。这意味着我想使用类似的东西:
const struct SystemConfig {
.channels = 5,
.mode = NORMAL_MODE,
} SYSTEM_CONFIG;
稍后在我的代码中使用它像往常一样:
...
numberOfChannels = SYSTEM_CONFIG.channels;
mode = SYSTEM_CONFIG.mode;
...
我想用这种方法跳过#define
。
我的问题是编译器是否会实现这一点,并在编译时用它们各自的值替换值,考虑到一切都是常量?
编辑:很抱歉标记了 C 和C ++,现在已经修复了,我的问题只与 C 有关。我使用的编译器是带有ARM Cortex-M4目标的GCC。
答案 0 :(得分:0)
我会使用静态const,因此您的结构在链接级别不可见。例如:
static const unsigned int channels = 5;
unsigned numberOfChannels = channels;
肯定会被编译器优化。所以我不明白为什么现代编译器也无法优化你的例子。
如果是我,我会找到编译器选项来输出它所放置的代码。这是一个有趣的练习。