2014-02-07 10 views
7

sagen, dass ich meine Cursor-Position auf der rechten Seite eines rechten gegenüber Fall geschweifte Klammer haben, etwa so:Formatierung der switch-Anweisung

enter image description here

Nun, wenn ich die Eingabetaste drücken, erwarte ich das, um es Autom.Ausrichtung Cursor zwei Tabs in, genau wie die break Anweisung. Aber was es tut, ist dies:

enter image description here

Es fügt eine lächerliche fünf Tabs! dass Visual Studio zu wissen, eine Tonne Einstellungen hat, steuere ich Tools::Settings::Text Editor::C/C++::Formatting::Indentation und sehen folgendes Fenster:

enter image description here

Aber die markierten Optionen in jeder Kombination ändert sich eigentlich nicht um den Einzug beeinflussen überhaupt! Keine der anderen Optionen scheint auf Switch-Anweisungen anzuwenden, also weiß ich nicht, was ich tun soll. Wie kann ich verhindern, dass 5 Leerzeichen eingerückt werden, ohne die automatische Formatierung zu deaktivieren?

Und ich könnte hinzufügen, es nicht nur 5 Tabs, wenn ich die Eingabe am Ende der geschweiften Klammer drücken, aber wenn Auto-Format-Ereignis stattfindet. Wenn ich also am Ende einer Zeile ein Semikolon anlege, werden 5 Tabs gesetzt, selbst wenn ich sie vorher herausgenommen habe.

+1

Ich bin mir nicht sicher, ob Sie immer noch dieses Problem auftreten, aber es scheint durch die intelligente Einrückung Text Editor verursacht werden -> C/C++ -> Tabs -> Einrücken (auf Blockieren). –

+0

@DenisV Funktioniert! Aber nur die Zeit wird zeigen, ob es etwas anderes kaputt macht ... – BWG

Antwort

1

Ich ging in VS2013 und erstellt ein neues Projekt und versucht, nur eine wirklich einfache switch machen, aber es formatiert für mich richtig, auch mit den geschweiften Klammern. Können Sie diesen Code schreiben?

Die einzige andere Sache, an die ich denken kann, ist vielleicht eine Einstellung, wie Klammern eingerichtet werden, aber ich weiß nicht, warum das beeinflussen würde. (Ich glaube auch nicht, dass es für C++ wirklich eine Einstellung dafür gibt ...) Abgesehen davon, dass Sie versuchen könnten, die Klammern überhaupt nicht zu verwenden, da Sie sich in einer case Anweisung befinden, brauchen Sie sie technisch nicht.

Ansonsten kann während der Installation etwas passiert sein. Also ist auch eine Neuinstallation eine Option.

EDIT:
Auch könnte einfach mit ihm gehen und den Code beenden und dann, wenn Sie fertig sind markieren Sie einfach die Zeilen und un-Einzug ([SHIFT] + [TAB]) sie zurück an ihre richtige Stelle.

+2

Das ist in der Tat seltsam. Ich habe ein eigenes neues Projekt erstellt, das wie in meinem Beispiel formatiert ist, also weiß ich, dass es keine seltsame Projekteinstellung ist. Ich habe Switch-Statements immer gehasst, aber ich dachte, ich würde ihnen eine Chance geben. Und jetzt wissen wir, wie das ausgegangen ist. Ich benutze stattdessen eine Reihe von 'else/if'. Schaltanweisungen einschrauben! – BWG

+0

Haha ich stimme zu. Ich war nie ein großer Fan, aber sie sind schneller als 'if {} else {}' Anweisungen, und sie sehen in einigen Situationen sauberer aus. Für mich klingt es ehrlich gesagt, als wäre etwas gerade erst merkwürdig installiert worden. Also entweder neu installieren oder aktualisieren, so viel wie ein Schmerz die sind. Tut mir leid, dass ich keine definitive Lösung gefunden habe. –

+0

Es ist ziemlich gut. Ich bin sicher, jeder Leistungsunterschied wird vernachlässigbar sein, und ich kann sie ordentlich aussehen lassen. Ich kann am Ende neu installieren, aber ich denke, dass ich jetzt gut bin. – BWG

2

Die geschweiften Klammern ({ und }) werfen den Autoindenter ab, und er wird auf eine Registerkarte hinter der Klammer eingezogen.

Klammern dort sind nicht illegal in einer switch-Anweisung, aber sie tun Ihnen in der Regel nicht gut. Wenn Sie keine Variable deklarieren müssen, entfernen Sie einfach die geschweiften Klammern. Sie erhalten den gleichen Codefluss, und Sie werden den Autoindenter nicht verwechseln.

BEARBEITEN Wenn Sie darüber nachdenken, können Sie dies lösen, indem Sie die Klammer einfach auf eine neue Linie verschieben. Das ist nicht unbedingt schrecklich - es unterstreicht, dass Sie eine Klammer verwenden.

case SDLK_g: 
    { 
     // etc 
     break; 
    } 
+2

Ich möchte eigentlich die geschweiften Klammern, weil ich ja eine variable Deklaration im Kopf habe! Außerdem glaube ich, dass es den Code unnötig macht. Danke für die Antwort obwohl – BWG

+0

In diesem Fall denke ich, dass du feststeckst. Es könnte einige Einstellungen geben, die Sie für die Klammer machen könnten, aber das könnte den ganzen Code außerhalb Ihres Schalters wegwerfen. –

+0

Diese Änderung ist gut zu wissen. Danke für die Mühe zu deiner Antwort! – BWG

3

Dies ist wahrscheinlich ein bisschen zu spät für Sie, aber falls jemand anderes dieses Problem findet: Es scheint ein Visual Studio Bug zu sein, Sie führen wahrscheinlich die frisch installierte Version von VS2K13 namens REL.

Das Herunterladen des Updates 4 bei http://www.microsoft.com/en-us/download/details.aspx?id=44921 half in meinem Fall.

Verwandte Themen