「 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