【问题标题】:GCC warning on implicit casting of void* to another pointer type将 void* 隐式转换为另一种指针类型的 GCC 警告
【发布时间】:2011-10-30 13:32:34
【问题描述】:

正如标题所说,当我做这样的事情时,有没有办法强制 GCC 警告我:

void do_something(int* ptr)
{
    // do something
}

int main()
{
    int a = 123;
    void* b = &a;

    // WARN HERE:
    do_something(b);
}

【问题讨论】:

  • 并且没有关于void* b = &a;类型信息丢失的警告?
  • 我当时用我通常的警告标志 (-pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wextra) 编译了那个 sn-p 并且没有任何警告。然而,这并不是我特别担心的部分。

标签: c gcc casting warnings void-pointers


【解决方案1】:

使用-Wc++-compat。来自GCC manual

-Wc++-compat(仅限 C 和 Objective-C)

警告 ISO C 结构 不在 ISO C 和 ISO C++ 的公共子集之外,例如要求 用于从 void * 到指向非 void 类型的指针的隐式转换。

【讨论】:

  • 做我需要的,太棒了!
  • 它只会发出警告,不会改变 GCC 的行为。编译后的输出将是相同的。
【解决方案2】:

答案可能是的两个原因:

  1. 这是合法的 C.
  2. 在其他情况下会很烦人,例如

    int *array = malloc(5 * sizeof(*array)).

【讨论】:

  • 感谢您的关注,但这并不能真正帮助我解决我的问题
猜你喜欢
  • 2012-03-14
  • 2016-09-25
  • 2020-12-14
  • 2021-08-23
  • 2011-12-05
  • 2010-10-08
相关资源
最近更新 更多