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?
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
@ 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
IIRC Clang kommt tatsächlich mit einem Werkzeug, um automatisch alte Null-Zeiger-Konstanten mit 'nullptr' zu ersetzen. –