为什么海湾合作委员会给我这个'-Wdiscarded-qualifiers'警告?

时间:2017-11-12 09:37:52

标签: c gcc const typedef compiler-warnings

在我正在处理的C SDL项目中,我typedef编辑char *str以提高可读性。

现在我做的时候:

const str title = SDL_GetWindowTitle(win);

SDL_GetWindowTitle返回const char *,我得到:

warning: return discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]

当我将类型更改为char *时,会删除警告:

const char *title = SDL_GetWindowTitle(win);

typedef只是一个类型的别名,对吧?因此,将变量声明为strchar *应该是等效的,为什么我会收到警告?或者有什么我想念的......?

我在CLI上使用GCC,因此它不是an IDE's fault

提前谢谢!

1 个答案:

答案 0 :(得分:5)

typedef不是宏替换,所以在你的情况下

const str
const char *

是不同的类型。前者实际上相当于:

char *const

这是const类型的char *值,因此它指向可变字符串。在您的示例中,您无法修改title,但您可以通过该指针修改*title(如果它实际指向非const内存,这取决于SDL_GetWindowTitle的内容)。

您必须为typedef添加单独的const char *才能解决此问题。