将字符串常量转换为 'TCHAR *' 时 GCC 警告的原因是什么?

问题描述 投票:0回答:1

我最近开始从 Charles Petzold 开始编写 C Windows API,我们必须在某个地方编写一个包含许多类似行的标头,如下所示: SM_CXSCREEN,文本(“SM_CXSCREEN”), TEXT(“屏幕宽度(以像素为单位)”), 在程序中使用此标头后,GCC 会像这样警告我: ISO C++ 禁止将字符串常量转换为 'TCHAR*' {aka 'char*'} [-Wwrite-strings]gcc

我希望更多地了解这个具体警告。

c winapi
1个回答
0
投票

出现错误 “ISO C++ 禁止将字符串常量转换为

TCHAR*
{aka
char*
}”
,因为在 C++ 中,像
"example"
这样的字符串文字属于
const char[]
类型(对于宽字符则为
const wchar_t[]
)文字如
L"example"
)。但是,您尝试将它们分配或传递给非常量指针类型,例如
TCHAR*
(或
char*
)。

这是不允许的,因为修改字符串文字是未定义的行为 - 因此警告

© www.soinside.com 2019 - 2024. All rights reserved.