为什么char*s ="string"在不是const时不显示错误或警告

Arj*_*ran 3 c pointers const

以下行

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)

另外:无论如何,使用后者是不是更好的做法?

Mic*_*CMS 8

从gcc编译选项:

-Wwrite-strings编译C时,给字符串常量类型为const char [length],以便将一个地址复制到非const char*指针中会产生警告.这些警告可以帮助您在编译时找到可以尝试写入字符串常量的代码,但前提是您在声明和原型中使用const非常小心.否则,这只会​​令人讨厌.这就是为什么我们没有让-Wall请求这些警告.

所以显然你需要明确允许-Wwrite-strings,而Wall不包含它.