关于const属性的函数返回警告

时间:2016-11-04 13:01:10

标签: c const warnings

我大量减少了我的真实代码,以使其尽可能紧凑。

我的问题是关于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,警告就会消失。

2 个答案:

答案 0 :(得分:2)

当您将某些内容标记为const时,您告诉编译器您不会修改它。

您正在使用const char *并将其作为char *返回。这违背了consttmp的承诺。调用此函数的代码可以自由修改它返回的内容,因为它不会返回const指针。

更改somefunction以返回const char *

const char *somefunction (char *c) {
    ...

答案 1 :(得分:1)

当你返回一个指针时,你可以选择"编辑"您的数据到函数的调用者。这与你之前所做的相矛盾:

extern const char tmp[];

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