gpt4 book ai didi

c - Visual Studio 中 const 与 #define 的问题

转载 作者:行者123 更新时间:2023-11-30 14:31:29 25 4
gpt4 key购买 nike

据我了解,#define x yconst int x = y; 在 Visual Studio 编译器下应该工作相同,但 const int x = y ; 是首选方法。

我的 C 代码看起来像这样:

static const int x = 100000;

void SomeFunction(...)
{
volatile static int y = x;
...
}

这里的问题在于 y 的声明。如果我对 x 使用 #define ,那么就没有问题,但是使用上面的代码会导致编译器返回“错误 c2099:初始值设定项不是常量。”

我正在尝试从命令行进行编译,并且没有使用任何编译器标志,因此我不确定是否需要设置一个标志以便编译器优化 const - 或者如果我偶然发现了某种特殊情况。

将程序编译为 C++ 程序也可以,但如果可能的话,我宁愿避免这种情况。

最佳答案

我不太了解 C 标准,但我以前读过相关内容。这是我的理解。

严格的 ANSI C 编译器只允许您使用常量表达式作为初始值设定项。请注意,常量表达式只能涉及文字值,不能涉及 const 限定的变量。

我相信这是因为在编译期间,编译器必须计算要初始化的值,以便它可以静态地将这个值插入堆栈,而无需在运行时进行任何计算。即使 const 限定的变量也可以更改(通过删除 const 限定符并更改值)。

const int x = 5;
*(int *)&x = 3;

我认为 C99 允许您仅在函数范围内使用 const 限定的变量进行初始化,文件范围变量仍然受到相同的限制。

关于c - Visual Studio 中 const 与 #define 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/732321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com