静态本地的C与C++初始化

Mar*_*yer 4 c c++

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

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

在C++中,这可以在没有警告或错误的情况下编译.在CI中获取编译错误"初始化程序不是常量".为什么两者之间有所不同?我正在为Visual Studio 2008使用VC9编译器.

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

Ada*_*eld 18

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

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

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