🔴问题描述:
写的一个小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);
🔵结果展示:
无编译告警,问题解决。