In einer Programmierstil-Frage zu Endlosschleifen haben einige Leute erwähnt, dass sie das bevorzugen für (;;) style, weil der while (true) -Stil Warnmeldungen auf MSVC über einen bedingten Ausdruck gibt, der konstant ist.
Das hat mich sehr überrascht, da die Verwendung von konstanten Werten in bedingten Ausdrücken ein nützlicher Weg ist, #ifdef-Hölle zu vermeiden. Zum Beispiel können Sie in Ihrer Kopfzeile haben:
%Vor%Und der Code kann einfach eine Bedingung verwenden und dem Compiler vertrauen, um den toten Code zu ignorieren, wenn CONFIG_FOO nicht definiert ist:
%Vor%Anstatt bei jedem Einsatz von foo_enabled auf CONFIG_FOO testen zu müssen:
%Vor%Dieses Entwurfsmuster wird ständig im Linux-Kernel verwendet (zum Beispiel include / linux / cpumask.h definiert mehrere Makros auf 1 oder 0, wenn SMP deaktiviert ist und auf einen Funktionsaufruf, wenn SMP aktiviert ist).
Was ist der Grund für diese MSVC-Warnung? Gibt es außerdem einen besseren Weg, die #ifdef-Hölle zu vermeiden, ohne diese Warnung zu deaktivieren? Oder ist es eine zu breite Warnung, die generell nicht aktiviert werden sollte?
Eine Warnung bedeutet nicht automatisch, dass der Code schlecht ist, sondern nur verdächtig aussieht.
Persönlich beginne ich von einer Position aus, die alle Warnungen aktiviert, die ich kann, und schalte dann alle aus, die eher nervig als nützlich sind. Derjenige, der immer dann feuert, wenn du etwas zu einem Boolen machst, ist normalerweise der erste, der geht.
Ich denke, der Grund für die Warnung ist, dass Sie versehentlich einen komplexeren Ausdruck haben, der zu einer Konstante auswertet, ohne es zu merken. Angenommen, Sie haben eine solche Deklaration in einer Kopfzeile:
%Vor%später, weit entfernt von der Deklaration von x, hast du eine Bedingung wie:
%Vor%Sie bemerken vielleicht nicht, dass es sich um einen konstanten Ausdruck handelt.
Ich glaube, es ist, Dinge wie
zu fangen %Vor%wenn du meintest
%Vor%Tags und Links c c++ visual-c++ warnings