以下行
char *s = "string";
Run Code Online (Sandbox Code Playgroud)
gcc即使有,也不会抛出任何警告/错误-Wall.
AFAIK,指针s直接指向某些部分.rodata,使其成为指向a的指针const char.
那么,为什么指针不抱怨并期望:
const char *s = "string";
Run Code Online (Sandbox Code Playgroud)
另外:无论如何,使用后者是不是更好的做法?
从gcc编译选项:
-Wwrite-strings编译C时,给字符串常量类型为const char [length],以便将一个地址复制到非const char*指针中会产生警告.这些警告可以帮助您在编译时找到可以尝试写入字符串常量的代码,但前提是您在声明和原型中使用const非常小心.否则,这只会令人讨厌.这就是为什么我们没有让-Wall请求这些警告.
所以显然你需要明确允许-Wwrite-strings,而Wall不包含它.