35 Stimmen

Werkzeug zum Auffinden von C-Style Casts

Kennt jemand ein Tool, das ich verwenden kann, um explizite C-Stil Casts in Code zu finden? Ich bin refactoring einige C++-Code und wollen C-Stil Casts ersetzen, wo immer möglich.

Ein Beispiel für einen C-Style-Cast wäre:

Foo foo = (Foo) bar;

Im Gegensatz dazu wären Beispiele für C++-artige Casts:

Foo foo = static_cast<Foo>(bar);
Foo foo = reinterpret_cast<Foo>(bar);
Foo foo = const_cast<Foo>(bar);

1 Stimmen

Ein Typ in Klammern, z. B. (int)f

0 Stimmen

Oh, ok - er kontrastiert mit dem C++-Stil. Ich weiß so gut wie nichts über C++, außer dem, was ich über C weiß.

0voto

Alex Martelli Punkte 805329

Ein Problem mit C-Stil Casts ist, dass, da sie auf Klammern, die weit überlastet sind, sind sie nicht trivial zu erkennen. Dennoch, eine Regex wie (z.B. in Python-Syntax):

r'\(\s*\w+\s*\)'

ist ein Anfang - er entspricht einem einzelnen Bezeichner in Klammern mit optionalem Leerzeichen innerhalb der Klammern. Aber natürlich fängt das nicht, z.B., (void*) wirft - um auch die nachgestellten Sternchen zu erhalten,

r'\(\s*\w+[\s*]*\)'

Sie könnten auch mit einer optionalen const das Netz noch weiter auszudehnen usw. usw.

Sobald Sie eine gute RE haben, können viele Tools (von grep a vim , von awk a sed sowie perl , python , ruby usw.) können Sie es anwenden, um alle Übereinstimmungen in Ihrer Quelle zu identifizieren.

0voto

Frunsi Punkte 7019

Wenn Sie eine Art von ungarischer Notation verwenden (z.B. iInteger , pPointer usw.), dann können Sie z.B. suchen nach )p y ) p und so weiter.

Es sollte möglich sein, alle diese Stellen in angemessener Zeit zu finden, selbst bei einer großen Codebasis.

0voto

Ira Baxter Punkte 91118

Ich habe schon einmal mit einer Beschreibung eines Werkzeugs geantwortet, das Folgendes findet und ändern alle Würfe, wenn Sie es wünschen.

Wenn Sie nur Folgendes tun wollen finden. Es gibt ein weiteres Werkzeug, das dies problemlos ermöglicht und die extreme Verallgemeinerung aller hier gemachten Vorschläge für "reguläre Ausdrücke" darstellt. Das ist die SD-Quellcode-Suchmaschine . Dieses Tool ermöglicht die Suche in großen Codebasen nach den Sprachelementen, aus denen die einzelnen Sprachen bestehen. Es bietet eine grafische Benutzeroberfläche, die es Ihnen ermöglicht, Abfragen einzugeben, einzelne Treffer zu sehen und den Text der Datei am Trefferpunkt mit einem Mausklick anzuzeigen. Ein weiterer Klick und Sie können in Ihrem Editor [für viele Editoren] auf eine Datei zugreifen. Das Tool zeichnet auch eine Liste der Treffer im Kontext auf, so dass Sie sie später wieder aufrufen können.

In Ihrem Fall wird die folgende Suchmaschinenanfrage wahrscheinlich die meisten Treffer erzielen:

'(' I ')'  | '(' I ... '*' ')'

was bedeutet, eine Folge von Token zu finden, wobei das erste (, das zweite ein beliebiger Bezeichner, das dritte ')' oder eine ähnliche Folge ist, die etwas enthält, das mit '*' endet.

Sie müssen keine Leerzeichenverwaltung angeben, da das Tool die Leerzeichenregeln der Sprache versteht; es ignoriert sogar einen Kommentar in der Mitte eines Satzes und stimmt trotzdem mit den obigen Angaben überein.

(Ich bin der CTO des Unternehmens, das dies anbietet.)

-1voto

Vaillancourt Punkte 1324

Ich habe diesen regulären Ausdruck in Visual Studio (2010) Find in files search box verwendet: :i\):i

Danke an sth für die Inspiration ( sein Amt )

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X