9 Stimmen

Gibt es ein Programm oder einen Trick, um die Definition einer Variablen zu finden?

Wenn ich mir den Code anderer ansehe, möchte ich oft nur wissen, wo und wie eine Variable definiert ist. Normalerweise suche ich nach dem Typ der Variablen, bis ich die Definition finde, was sehr zeitaufwändig ist. Ich vermute, dass es einige Tools gibt, die mir in dieser rutinären Situation helfen können. Haben Sie einen Vorschlag für einige Tools oder Befehle, die mir bei dieser Aufgabe helfen?

Ich weiß, dass dies bei der Verwendung einer grafischen Benutzeroberfläche und der Erstellung eines Projekts automatisch geschieht, aber ich suche nach einer Möglichkeit, dies ohne eine grafische Benutzeroberfläche zu tun. Ich arbeite nur mit dem Textmodus. Ich arbeite unter Linux und verwende C/C++, aber Vorschläge für andere Sprachen sind willkommen.

Herzlichen Dank.

Eine mögliche Lösung

Michel schlägt in einem seiner Kommentare eine einfache und effektive Lösung vor: Definieren Sie die Variable erneut, dann wird der Compiler bei der Kompilierung mitteilen, wo sich die vorherige Definition befindet. Um diese Lösung anzuwenden, müssen wir natürlich vorher an die Lokalität der Variablen denken.

0 Stimmen

Sie könnten zumindest die Sprache angeben ;)

1 Stimmen

Ich stehe so sehr auf C++, dass mein Verstand jetzt nur noch denkt, dass es nur eine Sprache gibt.

0 Stimmen

Die Methode, die Variable neu zu definieren, ist keine Lösung. Sie haben verschiedene Namespaces. Wenn Sie zum Beispiel eine Variable mit dem Namen "average" suchen, können Sie sie innerhalb einer Methode oder Funktion oder in einem anderen Namensraum (mit demselben Namen) definieren, und es ist kein Fehler.

9voto

Jon Skeet Punkte 1325502

Sie haben bereits das am besten geeignete Werkzeug angegeben: eine IDE. Diese ist genau die Art von Dingen, die eine IDE hervorragend beherrscht. Warum sollten Sie ノット eine IDE verwenden möchten, wenn Sie die Entwicklung ohne IDE als mühsam empfinden?

Beachten Sie, dass Emacs, Vim usw. als IDEs funktionieren können - ich spreche nicht davon, Sie in die Welt der GUIs zu zwingen, wenn Sie in einer reinen Textsituation bleiben wollen, z.B. weil Sie sich per SSH einloggen.

(Ich bin wirklich ノット Ich will hier nicht unhöflich sein. Ich denke nur, dass Sie die offensichtliche Lösung außer Acht gelassen haben, ohne zu erklären, warum).

0 Stimmen

Der Grund, warum ich das nicht in Betracht gezogen habe, ist, dass ich normalerweise GUIs benutze, aber jetzt arbeite ich an einem kleinen Projekt nur im SSHing-Modus und ich suche nach etwas Einfachem. Sie haben nicht unhöflich gewirkt. Vielen Dank

0 Stimmen

In diesem Fall würde ich Emacs als IDE verwenden. Ich wäre überrascht, wenn es nicht irgendwo eine "Go-to-Definition" gäbe.

0 Stimmen

AFAIK, Emacs hat eine solche Funktionalität nicht von Haus aus, obwohl ctags und Semantic, zwei Add-ons, sie anbieten.

8voto

Diego Sevilla Punkte 27639

bearbeiten : OK, Sie sagen, Sie verwenden C++. Ich ändere meine Antwort. Ich würde den C-Präprozessor verwenden und dann mit grep nach der Variablen suchen. Sie wird an erster Stelle erscheinen.

cpp -I...(preprocessor options here) file.cpp | grep variable

Der C-Präprozessor verbindet alle Includes, die das Programm verwendet, und die Definition muss vor jeder Verwendung dieser Variablen in der Datei stehen. Das ist nicht perfekt, aber ohne eine IDE oder ein komplettes Sprachbeschreibungs-/Verwaltungstool haben Sie nur den Text.

Eine andere Möglichkeit wäre die Verwendung von ctags . Es versteht die C- und C++-Syntax (neben anderen) und kann mit Hilfe von Kommandozeilenwerkzeugen, wie emacs und vi, nach Variablen und Funktionen durchsucht werden.

0 Stimmen

Neben ctags ist Semantic ein weiteres Add-on, das für Emacs-Benutzer interessant sein könnte: cedet.sourceforge.net/semantic.shtml

0 Stimmen

Danke, codelogic. Ja, ich habe es gerade entdeckt und probiere es aus :) Nochmals vielen Dank.

5voto

greyfade Punkte 24134

Ich verwende cscope und ctags-exuberant mit Hingabe. Ich lasse es einmal auf meiner Codebasis laufen und kann dann in Vim verschiedene Befehle wie ^] oder [D oder [I oder ähnlich verwenden, um alle Definitionen oder Deklarationen für ein bestimmtes Wort zu finden.

Dies ist vergleichbar mit den Funktionen von Mega-IDEs wie Visual Studio und Eclipse.

Cscope funktioniert auch als eigenständiges Tool, das diese Suchvorgänge durchführt.

2voto

Steve Rowe Punkte 19335

Ich verwende eine von drei Methoden:

  1. Ich werde die CTags um meinen Quellcode-Baum (nachts) zu verarbeiten und kann dann einfach Befehle in Vim (oder anderen Editoren) verwenden, um direkt zur Definition zu springen.
  2. Ich werde einfach grep (Linux) oder findstr (Windows) verwenden, um nach allen Vorkommen des Variablennamens oder -typs zu suchen. Die Definition ist normalerweise ziemlich offensichtlich.
  3. In Vim können Sie einfach rückwärts im Bereich suchen und finden oft, was Sie suchen.

1voto

Michel Punkte 1426

Grep nach allgemeinen Mustern für Variablendeklarationen. Beispiel: *, &, > oder ein alphanumerisches Zeichen, gefolgt von einem oder mehreren Leerzeichen, dann der Name der Variablen. Oder Variablenname gefolgt von null oder mehr Leerzeichen, dann eine linke Klammer oder ein Semikolon. Es funktioniert immer, es sei denn, die Variable wurde unter sehr merkwürdigen Umständen definiert (z. B. mit einer Art Makro).

0 Stimmen

Ja, normalerweise mache ich das, aber ich wollte etwas "Professionelleres".

0 Stimmen

Sie können die Variable jederzeit neu definieren und auf einen Kompilierfehler warten, der Ihnen mitteilt, wo die vorherige Deklaration war. Alles, was professioneller ist, wäre wahrscheinlich nur "benutze eine IDE".

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