我最近开始从 Charles Petzold 开始编写 C Windows API,我们必须在某个地方编写一个包含许多类似行的标头,如下所示: SM_CXSCREEN,文本(“SM_CXSCREEN”), TEXT(“屏幕宽度(以像素为单位)”), 在程序中使用此标头后,GCC 会像这样警告我: ISO C++ 禁止将字符串常量转换为 'TCHAR*' {aka 'char*'} [-Wwrite-strings]gcc
我希望更多地了解这个具体警告。
出现错误 “ISO C++ 禁止将字符串常量转换为
TCHAR*
{aka char*
}”,因为在 C++ 中,像 "example"
这样的字符串文字属于 const char[]
类型(对于宽字符则为 const wchar_t[]
)文字如 L"example"
)。但是,您尝试将它们分配或传递给非常量指针类型,例如 TCHAR*
(或 char*
)。
这是不允许的,因为修改字符串文字是未定义的行为 - 因此警告