我正在处理一个非常大的代码库,最近升级到GCC 4.3,现在触发了这个警告:

警告:不赞成将字符串常量转换为' char* '

显然,解决这个问题的正确方法是找到每一个声明

char *s = "constant string";

或者像这样调用函数:

void foo(char *s);
foo("constant string");

让它们成为const char指针。但是,这意味着至少要接触564个文件,这不是我目前希望执行的任务。现在的问题是我正在使用-Werror运行,所以我需要一些方法来抑制这些警告。我该怎么做呢?


当前回答

我不明白如何应用你的解决方案:(- kalmanIsAGameChanger

在使用Arduino草图时,我有一个函数引起了我的警告。

最初的功能:

char StrContains(char *str, char *sfind)

为了停止警告,我在char *str和char * find前面添加了const。

修改:

char StrContains(const char *str, const char *sfind).

所有的警告都消失了。

其他回答

在c++中,使用如下所示的const_cast

char* str = const_cast<char*>("Test string");

而不是:

void foo(char *s);
foo("constant string");

如此:

void foo(const char s[]);
foo("constant string");

当将字符串常量传递给函数时,将其写成:

void setpart(const char name[]);

setpart("Hello");

除了const char name[],你也可以写const char \*name。

它为我消除了这个错误:

[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]

只需使用g++的-w选项。

例子:

g++ -w -o simple.o simple.cpp -lpthread

记住,这并不能避免弃用。相反,它阻止在终端上显示警告信息。

现在,如果你真的想避免弃用,可以像这样使用const关键字:

const char* s = "constant string";  

从常量字符串到字符指针进行类型转换。

char *s = (char *) "constant string";