函数 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[];

这是一个指针的声明,该指针指向应该保持不变的东西,即不可编辑的东西。 编译器只是警告你这个矛盾。