Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中使用const struct而不是defines对配置参数进行分组是否有效?_C_Struct_C Preprocessor_Buildconfiguration - Fatal编程技术网

在C中使用const struct而不是defines对配置参数进行分组是否有效?

在C中使用const struct而不是defines对配置参数进行分组是否有效?,c,struct,c-preprocessor,buildconfiguration,C,Struct,C Preprocessor,Buildconfiguration,我正在考虑使用一个全局常量结构来管理一些子系统的配置。这意味着我想使用如下内容: const struct SystemConfig { .channels = 5, .mode = NORMAL_MODE, } SYSTEM_CONFIG; 然后像往常一样在我的代码中使用它: ... numberOfChannels = SYSTEM_CONFIG.channels; mode = SYSTEM_CONFIG.mode; ... 我想用这种方法跳过define 我的问题是,考虑到一

我正在考虑使用一个全局常量结构来管理一些子系统的配置。这意味着我想使用如下内容:

const struct SystemConfig {
  .channels = 5,
  .mode = NORMAL_MODE,
} SYSTEM_CONFIG;
然后像往常一样在我的代码中使用它:

...
numberOfChannels = SYSTEM_CONFIG.channels;
mode = SYSTEM_CONFIG.mode;
...
我想用这种方法跳过define

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


<>编辑:对不起,C和C++都是固定的,现在我的问题只涉及到C。我使用的编译器是GCC,带有ARM CORTEX-M4目标。

< P>我将使用静态const,这样你的结构在链接级别上是不可见的。例如:

static const unsigned int channels = 5;
unsigned numberOfChannels = channels;
肯定会被编译器优化。所以我不明白为什么任何现代编译器也不能优化您的示例


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

试试看!找到答案的唯一方法是查看生成的汇编代码…如果编译器愿意。。。哪个编译器?因为它被C和C++两种语言所标记,即使编译器没有特殊的情况,它实际上会对代码的运行时间造成多大的差异?机构相当整洁;如果你认为符号清晰是值得的,那么就使用它。它可能是值得的。@Niklas Norin你熟悉设计模式吗?您是否考虑过单音模式,正如您在问题中所描述的,它非常适合您的需要