2016-01-22 39 views
6

Il nostro progetto utilizza C++ 11/14 e vogliamo utilizzare nullptr anziché 0 o NULL con i puntatori, anche quando è consentito 0 (come valore letterale intero).Quale avviso di Clang è equivalente a Wzero-as-null-pointer-constant di GCC?

Ho il codice seguente:

int main() 
{ 
    int *ptr1 = nullptr; // #1 
    int *ptr2 = 0;  // #2 
} 

Se posso compilare con GCC (5.3.0) e la bandiera -Wzero-as-null-pointer-constant IT avvertimenti in #2, ma non riesco a trovare una bandiera simile a Clang. Se compilo il codice con Clang (3.7.1) e la bandiera -Weverything, non ricevo alcun avviso su #2.

Quindi, c'è un modo per ottenere un avviso simile per questo in Clang?

+1

È anche peggio di così. In C++ puoi usare qualsiasi espressione costante intera che valuti zero, non solo un valore letterale ... ad es. '!!!!! 1'. – 6502

+1

@ 6502 Penso che sia stato il comportamento in C++ 98, ma C++ 14 sembra cambiarlo. Vedi questo [risposta] (http://stackoverflow.com/a/33656869/2484624). Se ho capito bene, '!!!!! 1' è un'espressione costante integrale (che valuta' false') e non un valore letterale intero. – Daniel

+0

Il clang IIRC viene fornito con uno strumento per sostituire automaticamente le vecchie costanti del puntatore nullo con 'nullptr'. –

risposta

4

Clang non supporta questo tipo di avvertenze (ad esempio, non c'è l'equivalente -Wzero-as-null-pointer-constant in Clang). Puoi vederlo da solo se aggiungi l'opzione -Weverything (la mente lo fa solo per i test), che abilita tutti gli avvertimenti di Clang.

Live Demo