gpt4 book ai didi

c++ - 静态局部变量的 C 与 C++ 初始化

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:43 30 4
gpt4 key购买 nike

我在 C 和 C++ 中都有以下代码

static void callback(char const* fname, int status)
{
static char const* szSection = fname;
//other stuff
}

在 C++ 中,这可以正常编译,没有警告或错误。在 C 中,我得到编译错误“initializer is not constant”。为什么两者不同?我正在为两者使用 Visual Studio 2008 的 VC9 编译器。

我试图将文件名作为输入并第一次设置文件的路径。所有进一步的回调都用于检查文件中的更新,但不允许更改路径本身。我是否在 char const* 中使用了正确的变量?

最佳答案

因为 C 和 C++ 中的规则不同。

在 C++ 中,函数内的 static 变量会在第一次到达代码块时进行初始化,因此允许使用任何有效表达式对它们进行初始化。

在 C 中,static 变量在程序启动时初始化,因此它们需要是编译时常量。

关于c++ - 静态局部变量的 C 与 C++ 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7666636/

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