【问题标题】:Function return warning about const attribute函数返回关于 const 属性的警告
【发布时间】:2016-11-04 13:01:10
【问题描述】:

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

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

【问题讨论】:

  • 因为返回类型是char*而不是const char*。将char *somefunction (char *c) 更改为const char *somefunction (char *c)
  • 工作...非常感谢!

标签: c constants warnings


【解决方案1】:

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

您将获取const char * 并将其作为char * 返回。这违背了您向tmp 提供的const 的承诺。调用此函数的代码可以随意修改它返回的内容,因为它不返回 const 指针。

更改somefunction 以返回const char *

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

【讨论】:

  • 没想到那么远(C 中的新手......对不起)......!谢谢!
【解决方案2】:

当您返回一个指针时,您可以将数据“编辑”给函数的调用者。这与您之前所做的相矛盾:

extern const char tmp[];

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

【讨论】:

    猜你喜欢
    • 2012-11-13
    • 2020-04-20
    • 2019-07-15
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2016-05-25
    • 2016-12-09
    • 2020-01-09
    相关资源
    最近更新 更多