Warum hat nicht der compiler warnen, über eine leere if-Anweisung?

Ich bin mit Keil µvision v4.74 und aktiviert die option "Alle Warnungen".

Schrieb ich Folgendes absichtlich code:

if(condition matched)
{
 //do something
}

Wenn ich baute mein Projekt, ich habe 0 Fehler, 0 Warnungen.

Allerdings, wenn ich versehentlich schrieb:

if(condition matched);
{
 //do something
}

Bekam ich auch 0 Fehler, 0 Warnungen.

Es unmöglich war für mich zu erfahren, dass eine kleine ; folgenden die if-Bedingung war die Wurzel des Problems.

Nicht warum der compiler behandeln Sie es als eine Warnung und informiert mich?

  • Warum sollte er auch? Das ist ein sehr gut gebildet und rechtliche Hinweise. Nichts warnable hier.
  • Wenn ich eine variable deklarieren und verwenden Sie es nicht, wird er sagen, "variable deklariert, aber nicht definiert". Sollte er etwas sagen wie "wenn-Anweisung verwendet, aber keinen Körper, der für die if-Anweisung?"
  • Eine Sache möchte ich hier erwähnen. Dies ist überhaupt nicht im Zusammenhang mit keil.. im Allgemeinen die Programmierung auch wird es geschehen.
  • ich es markiert zu keil, weil ich erwartet, dass jemand von keil können in der Lage sein zu sagen, warum oder erwägen, dies zu verbessern Ihre IDE. Ich möchte nicht, dass jemand mit Keil zu gehen durch das gleiche problem, ich ging durch. gcc wirft eine Warnung, wie gesagt, von @Matteo
  • Der compiler ausgeben sollte eine und nur eine Warnung, "Sie sind mit c, nicht erwarten, eine Sicherheit Netz".
  • Ich bin damit einverstanden, ich kann mir nicht vorstellen, dass es eine legitime Grund für die Erklärung einer if - Anweisung ohne einen Körper. Scheint, wie es sollte warnen, standardmäßig, ohne Sie zu Fragen, die compiler für zusätzliche Warnungen.
  • im Gegenteil, gegeben, dass die Laufzeit komplett ohne Sicherheitsnetze aus performance-Gründen, dass Sie alle möglichen statische Analyse zur compile-Zeit ist äußerst wünschenswert.
  • dann nicht user C oder C++! Modul 2 wäre eine viel bessere option, wenn Sie sich sorgen über die Sicherheit.
  • Aber... das ist genau das, was Warnhinweise sind. Wenn es nicht gut gebildet und legal, es wäre ein Fehler. Warnungen werden für Dinge, die legal sind, aber misstrauisch, als wahrscheinlich ein Logik-Fehler.
  • Bedenken Sie, dass viele makro-suites erstellen einer solchen situation rechts und Links, wie bits von code "auskommentiert" ist oder nicht, basierend auf global-macro-variable Einstellungen.
  • Das klingt interessant für mich, weil ich kann nicht denken Sie an einen Fall, wo es würde nicht gerade so viel, um entweder 1) "kommentieren" die if block oder 2) invertieren der bedingten und machen die Aussage, dass bekommt "auskommentiert" ein else block oder etwas ähnliches. Also, die situation scheint völlig vermeidbar, aber ich bin kein C-Experte, vielleicht gibt es nur Dinge, die ich denke nicht.
  • Betrachten Sie, wenn ich if (a) some_dump_macro;. Wenn ein globales flag irgendwo schaltet some_dump_macro dann habe ich am Ende mit if (a);.
  • weil keil-compiler ist nicht sehr user-freundlich

Schreibe einen Kommentar