[英]C vs C++ initialization of static locals
我在C和C ++中都有以下代碼
static void callback(char const* fname, int status)
{
static char const* szSection = fname;
//other stuff
}
在C ++中,這可以在沒有警告或錯誤的情況下編譯。 在CI中獲取編譯錯誤“初始化程序不是常量”。 為什么兩者之間有所不同? 我正在為Visual Studio 2008使用VC9編譯器。
我正在嘗試將文件名作為輸入,並在第一次設置文件的路徑。 所有進一步的回調都用於檢查文件中的更新,但路徑本身不允許更改。 我在char const *中使用了正確的變量嗎?
因為C和C ++中的規則不同。
在C ++中,函數內部的static
變量在第一次到達代碼塊時被初始化,因此允許使用任何有效的表達式對它們進行初始化。
在C中, static
變量在程序啟動時初始化,因此它們需要是編譯時常量。
函數中的靜態變量必須在編譯時初始化。
這可能是你想要的:
static void callback(char const* fname, int status)
{
static char const* szSection = 0;
szSection = fname;
//other stuff
}
在C ++中,我更願意沿着這些方向做點什么:
static void callback(char const* fname, int status)
{
static std::string section;
if( section.empty() && fname && strlen(fname) )
{
section = fname;
}
// other stuff
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.