在我正在处理的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只是一个类型的别名,对吧?因此,将变量声明为str
或char *
应该是等效的,为什么我会收到警告?或者有什么我想念的......?
我在CLI上使用GCC,因此它不是an IDE's fault。
提前谢谢!答案 0 :(得分:5)
typedef
不是宏替换,所以在你的情况下
const str
const char *
是不同的类型。前者实际上相当于:
char *const
这是const
类型的char *
值,因此它指向可变字符串。在您的示例中,您无法修改title
,但您可以通过该指针修改*title
(如果它实际指向非const
内存,这取决于SDL_GetWindowTitle
的内容)。
您必须为typedef
添加单独的const char *
才能解决此问题。