我大量减少了我的真实代码,以使其尽可能紧凑。
我的问题是关于const
属性。当我编译这个......
const char tmp[] = "anything";
int main(int argc, char *argv[]) {
/* my code */
return 0;
}
char *somefunction (char *c) {
extern const char tmp[];
/* my code */
return tmp;
}
......我明白了:
警告:从指针目标类型[默认启用]
返回丢弃'const'限定符
代码工作正常。
somefunction
未触及字符串tmp
,为什么return
会产生此警告?
如果我离开const
,警告就会消失。
答案 0 :(得分:2)
当您将某些内容标记为const
时,您告诉编译器您不会修改它。
您正在使用const char *
并将其作为char *
返回。这违背了const
对tmp
的承诺。调用此函数的代码可以自由修改它返回的内容,因为它不会返回const
指针。
更改somefunction
以返回const char *
:
const char *somefunction (char *c) {
...
答案 1 :(得分:1)
当你返回一个指针时,你可以选择"编辑"您的数据到函数的调用者。这与你之前所做的相矛盾:
extern const char tmp[];
指向一个应保持不变的指针的声明,即不可编辑。 编译器只是警告你这个矛盾。