1

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

const struct SystemConfig {
  .channels = 5,
  .mode = NORMAL_MODE,
} SYSTEM_CONFIG;

然后像往常一样在我的代码中使用它:

...
numberOfChannels = SYSTEM_CONFIG.channels;
mode = SYSTEM_CONFIG.mode;
...

我想用这种方法跳过#define's.

我的问题是,考虑到一切都是不变的,编译器是否会意识到这一点并在编译时用它们各自的值替换这些值?

编辑:很抱歉标记了C和 C++,它现在已修复,我的问题仅与C相关。我使用的编译器是带有 ARM Cortex-M4 目标的 GCC。

4

1 回答 1

0

我会使用 static const 所以你的结构在链接级别不可见。例如:

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

肯定会被编译器优化。所以我看不出为什么任何现代编译器也无法优化您的示例。

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

于 2013-02-15T14:49:58.347 回答