更改 C 库函数以消除来自 g++ 的隐式 const 强制转换警告

问题描述

我想在从 C++ 调用某些 C 库函数时摆脱编译器警告。我知道该怎样。问题是,它安全吗?该库也被其他代码使用。

给定 C 库中的以下函数

void log_something(char * message);

它用于 C 和 C++ 代码。 当使用字符串字面量调用时,C 编译器认为一切都很好。 C++ 编译器给出了这个严厉的警告,但产生了一个二进制文件

log_something("This is a log message");
WME.cpp:7:35: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]

如果我传递的是 char * 而不是字符串文字char const *,我会收到来自 C 编译器的警告和来自 C++ 编译器的错误

MWE.c:9:19: warning: passing argument 1 of ‘log_something’ discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
MWE.cpp:11:19: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]

假设我已经验证 log_something(message) 不会以任何方式修改 *message,将函数更改为采用 char const * 而不是 char * 是否安全?

现有的 C 和 C++ 代码必须在函数更改后不加修改地继续工作(允许重新编译更新的库,但如果可以避免则很好)。

简单的测试表明它应该工作,但我担心可能存在我没有考虑过的边缘情况。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)