函数 return 关于 const 属性的警告
Function return warning about const attribute
我大大减少了我的实际代码,以使其尽可能紧凑。
我的问题是关于 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;
}
...我得到:
warning: return discards 'const' qualifier from pointer target type [enabled by default]
代码运行良好。
somefunction
没有触及字符串 tmp
,那么为什么 return
会生成此警告?
如果我离开 const
,警告就会消失。
当您将某些内容标记为 const
时,您是在告诉编译器您不会修改它。
您正在 const char *
并 return 将其作为 char *
。这违反了 const
您给 tmp
的承诺。调用此函数的代码可以自由修改它 return 的内容,因为它没有 return 一个 const
指针。
将somefunction
改为return一个const char *
:
const char *somefunction (char *c) {
...
当您返回一个指针时,您可以将 "edit" 您的数据提供给函数的调用者。这与您之前所做的矛盾:
extern const char tmp[];
这是一个指针的声明,该指针指向应该保持不变的东西,即不可编辑的东西。
编译器只是警告你这个矛盾。
我大大减少了我的实际代码,以使其尽可能紧凑。
我的问题是关于 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;
}
...我得到:
warning: return discards 'const' qualifier from pointer target type [enabled by default]
代码运行良好。
somefunction
没有触及字符串 tmp
,那么为什么 return
会生成此警告?
如果我离开 const
,警告就会消失。
当您将某些内容标记为 const
时,您是在告诉编译器您不会修改它。
您正在 const char *
并 return 将其作为 char *
。这违反了 const
您给 tmp
的承诺。调用此函数的代码可以自由修改它 return 的内容,因为它没有 return 一个 const
指针。
将somefunction
改为return一个const char *
:
const char *somefunction (char *c) {
...
当您返回一个指针时,您可以将 "edit" 您的数据提供给函数的调用者。这与您之前所做的矛盾:
extern const char tmp[];
这是一个指针的声明,该指针指向应该保持不变的东西,即不可编辑的东西。 编译器只是警告你这个矛盾。