2016-01-22 9 views
6

Unser Projekt verwendet C++ 11/14, und wir möchten nullptr anstelle von 0 oder NULL mit Zeigern verwenden, auch wenn 0 (als Integer-Literal) zulässig ist.Welche Clang-Warnung entspricht der WZ-Nullzeiger-Konstante von GCC?

Ich habe den folgenden Code:

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

Wenn ich mit GCC (5.3.0) und der Flagge -Wzero-as-null-pointer-constant es Warnungen in #2 kompilieren, aber ich kann nicht eine ähnliche Flagge in Clang finden. Wenn ich den Code mit Clang (3.7.1) und dem Flag -Weverything kompiliere, erhalte ich keine Warnung über #2.

Gibt es also eine Möglichkeit, eine ähnliche Warnung in Clang zu erhalten?

+1

Es ist sogar noch schlimmer. In C++ darf jeder Integer-Konstanten-Ausdruck verwendet werden, der auf null, nicht nur auf ein Literal, z. '!!!!! 1'. – 6502

+1

@ 6502 Ich denke, das war das Verhalten in C++ 98, aber C++ 14 scheint das zu ändern. Siehe hierzu [Antwort] (http://stackoverflow.com/a/33656869/2484624). Wenn ich richtig verstehe, ist '!!!!! 1' ein ganzzahliger konstanter Ausdruck (der zu 'false' führt) und kein Ganzzahl-Literal. – Daniel

+0

IIRC Clang kommt tatsächlich mit einem Werkzeug, um automatisch alte Null-Zeiger-Konstanten mit 'nullptr' zu ersetzen. –

Antwort

4

Clang unterstützt diese Art von Warnungen nicht (d. H. In Clang gibt es keine -Wzero-as-null-pointer-constant Entsprechung). Sie können es sich selbst sehen, wenn Sie die Option -Weverything hinzufügen (nur zum Testen), wodurch alle Warnungen von Clang aktiviert werden.

Live Demo