「 C/C++疑难杂症 」warning: ISO C++ forbids converting a string constant to ‘CHAR*’ {aka ‘char*’} [-Wwrite

Posted 谁吃薄荷糖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「 C/C++疑难杂症 」warning: ISO C++ forbids converting a string constant to ‘CHAR*’ {aka ‘char*’} [-Wwrite相关的知识,希望对你有一定的参考价值。

文章目录


🔴问题描述:

写的一个小demo,发现编译时有告警。

HisFault.cpp: In constructor ‘CHisFault::CHisFault()’:
HisFault.cpp:37:29: warning: ISO C++ forbids converting a string constant to ‘CHAR*’ aka ‘char*’ [-Wwrite-strings]
     Init(HISFAULTDBTABLENAME);

函数申明如下

	///< 初始化,ps8hisTableName--保存的表名
	BOOL32 Init(CHAR *ps8hisTableName);

宏定义如下

///< 历史故障表名
#define HISFAULTDBTABLENAME "InvHisFaultTable"

🟠问题分析:

Init函数需要传入一个字符串作为形参,我偷懒直接用宏定义了一个字符串,然后作为形参传入供模块初始化。其实这么使用就相当于把常量强制转为指针了,属于隐式的类型转换了,所以这就导致了上述的告警。

🟡处理思路:

显示地进行类型转换,从而规避这个告警。

🟢C++代码:

    CHAR *tableName = (CHAR *) HISFAULTDBTABLENAME;
    Init(tableName);

🔵结果展示:

无编译告警,问题解决。

以上是关于「 C/C++疑难杂症 」warning: ISO C++ forbids converting a string constant to ‘CHAR*’ {aka ‘char*’} [-Wwrite的主要内容,如果未能解决你的问题,请参考以下文章

关于Moment.js warning:Deprecation warning: value provided is not in a recognized RFC2822 or ISO format

warning: this decimal constant is unsigned only in ISO C90问题的处理及理解

c-free编译器总是出现一个警告,如何消除 warning:no newline at the end of file

仅针对一个标头禁用#warning

关闭_CRT_SECURE_NO_WARNINGS警告

_CRT_SECURE_NO_WARNINGS