2011-08-19 55 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

我很感謝您的關注,但這並不能真正幫助我解決我的問題 –