【问题标题】:C library warnings(pointer cast)C 库警告(指针转换)
【发布时间】:2016-02-06 09:38:42
【问题描述】:

我正在编写一个 C 库,并且经常收到警告“警告:return 从没有强制转换的指针中生成整数 [默认启用]”或类似的警告。例如:

int chal(chal_l* list, int pos)
{

  return list->data[pos];  \\warning occur here

}

这是关于数组列表的。 “pos”是索引。数据在 arraylist 结构中为“void ** data”。我不太确定如何修复这些与此类似的警告,并且在我的代码中出现了 4-5 次。

【问题讨论】:

  • 你的sn-p应该是Short, Self Contained, Correct (Compilable), Example——我们不知道list->data中存储了什么=>那些是ints?如果不是,为什么将函数定义为返回int 的函数? (因此警告)
  • 为什么我看不到?正如我之前提到的,尝试成为 SSCCE
  • 我必须粘贴所有代码吗?
  • 不,只有相关部分:SHORTSELF-CONTAINED => 我们不需要所有细节,只需要那些与您的问题有关
  • list->data 不能定义为 int*int[],否则您不会收到该警告。请提供chal_l的声明

标签: c pointers arraylist warnings


【解决方案1】:

数据在 arraylist 结构中为“void ** data”。

这意味着list->data[pos] 的类型是void *,而不是int,因此是警告。

如果您尝试返回list->data[pos] 的值,则函数的返回类型需要为void *,而不是int

如果您尝试返回 list->data[pos] 指向的整数对象的值,那么您需要执行以下操作:

return *( (int *) list->data[pos] );

也就是说,您将 list->data[pos] 从指向 void 的指针转换为指向 int 的指针并取消引用结果。

如果list->data[pos] 指向的东西不是一个整数,那么我不确定你要做什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2019-11-29
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多