2011-08-19 54 views
3

正如标题所说,是有办法迫使GCC警告我,当我做这样的事情:GCC警告到另一个指针类型

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

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

    // WARN HERE: 
    do_something(b); 
} 
+0

并且没有关于'void * b =&a;'类型信息丢失的警告? – Nobody

+0

我编译了那个片段,然后用我通常的警告标志('-pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wextra'),并没有任何警告。然而,这并不是我特别担心的部分。 –

回答

7

使用-Wc++-compat。从GCC manual

-WC++ - compat的(C和仅目的-C)

发出警告ISO C构造一个 是ISO C和ISO C的公共子集之外++,例如请求 用于从void *到一个指向非void类型的指针的隐式转换。

+0

不仅仅是我需要的,太棒了! –

+1

+1但是,这可能会打破其他C-only的东西。 – cnicutar

+1

它只发出警告,它不会改变GCC的行为。编译后的输出将是相同的。 –

1

两个原因,答案是大概没有

  1. 这是合法的C.
  2. 这将是在其他情况下,如烦

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

+0

我很感谢您的关注,但这并不能真正帮助我解决我的问题 –