有效在C中使用const结构而不是用于分组配置参数的定义吗?

时间:2013-02-15 14:05:33

标签: c struct c-preprocessor buildconfiguration

我正在考虑使用全局常量结构来管理某些子系统的配置。这意味着我想使用类似的东西:

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。

1 个答案:

答案 0 :(得分:0)

我会使用静态const,因此您的结构在链接级别不可见。例如:

static const unsigned int channels = 5;
unsigned numberOfChannels = channels;

肯定会被编译器优化。所以我不明白为什么现代编译器也无法优化你的例子。

如果是我,我会找到编译器选项来输出它所放置的代码。这是一个有趣的练习。