Advanced   Java   Services Eclipse  CDT  FAQ Back Next Up Home


Einleitung

Eine alphabetische Liste von hoffentlich nützlichen Tips, die immer wieder mal erweitert wird.


Argumente an main()
Run -> Run Configurations... -> Tab Arguments aktivieren -> Argumente in das Textfeld "Program arguments" eintragen.

Aus- und Einkommentieren von Code
Zeilen markieren -> CTRL SHIFT /

Automatisches Speichern vor Run

Automatisches Speichern vor einem Build oder Run ist nicht voreingestellt. So ändert man das:

Window -> Preferences -> Run/Debug -> Launching

eclipse-cpp-save-before-launch.jpg

Radiobutton bei "Save required dirty editors before launching" setzen.


c99-Einstellungen
Project -> Properties -> C/C++ Build -> Settings -> GCC C Compiler -> Miscellaneus

Hier kann man zusätzliche Flags setzen. Die c99-Einstellungen errreicht man mit (irgend)einem der folgenden Flags: -posix oder -D__USE_MINGW_ANSI_STDIO oder -std=c99.
Dann kann man neuere Datentypen wie etwa "long long" einlesen und ausgeben.

eclipse-cpp-c99-einstellung.jpg


Codestyle ändern

Eclipse bietet vier verschiedene Stile an, K&R (Kernighan&Ritchie), BSD, GNU und Whitesmiths. Auf der Grundlage eines der eingebauten Codestyles kann man auch einen eigenen entwerfen. Das geht ganz anaolg wie in Eclipse-Java.

Window -> Preferences -> C/C++ -> Code Style

Unter "Select a profile" kann man einen der vier Code Styles auswählen, mit "Edit" editieren oder mit "New" einen neuen entwerfen.

eclipse-cpp-bsd-codestyle.jpg


Codestyle exportieren

Der Codestyle wird als xml-Datei exportiert (gespeichert).

Window -> Preferences -> C/C++ -> Code Style -> Formatter -> Edit -> Export

Codestyle importieren
Window -> Preferences -> C/C++ -> Code Style -> Import

Dateien und Projekte umbenennen
Datei oder Projektnamen im Package Explorer markieren -> F2

Beim Umbenennen eines Projekts wird nur das Verzeichnis umbenannt. Ebenso beim Umbenennen von Dateien. Einträge in davon abhängigen Dateien werden also nicht geändert, hier muß. man von Hand umbenennen.


Fehlermeldungen auf Englisch anzeigen

Wenn "gcc" deutsche Fehlermeldungen ausgibt, kann das zu Problemen führen da Eclipse/CDT nur englische Meldungen parsen kann. So können etwa aus Warnings dann Errors werden, was recht unangenehm sein kann. So führt etwa eine Zuweisung eines unsigned int auf ein int zu einer Fehlermeldung. Man kann das wie folgt abstellen:

Project -> Properties -> C/C++ Buils -> Environment

eclipse-cdt-error-messages-01.jpg

Hier geht man auf den Add-Button und trägt eines neues key/value Paar (LC_MESSAGES/en_US) ein.

eclipse-cdt-error-messages-02.jpg

eclipse-cdt-error-messages-03.jpg


Funktionsdeklarationen in den Header-Dateien anspringen

Man kann F3 auch für die Funktionen und Makros aus den Headerdateien verwenden. Eclipse sucht dann die Deklaration in der zugehörigen Headerdatei. Es funktioniert übrigens auch mit den selbstgeschriebenen Headern.

Markieren des Funktionsnamen im Editor -> F3

(Standard-) Header-Dateien anzeigen

Es kann sehr hilfreich sein, einen Blick in die Headerdateien zu werfen- Das Tastenkürzel ist sehr einfach. Es funktioniert übrigens auch mit den selbstgeschriebenen Headern.

Markieren der Headerdatei im Editor -> F3

Header- und Sourcedateien (bzw. Objectdateien) einbinden, die außerhalb des Projekts liegen

Externe Headerdateien dem Projekt bekanntmachen
Project -> Properties -> C/C++ Build -> Settings -> GCC C Compiler -> Includes

eclipse-cdt-useexternalsource-01.jpg

eclipse-cdt-useexternalsource-02.jpg

Hier auf das kleine grüne +-Symbol neben dem Text Include paths (-I) klicken. Man erhält einen kleinen Dialog mit dem man das Verzeichnis der Headerdatei angeben kann.

eclipse-cdt-useexternalsource-03.jpg


Externe Source-oder Objectdatei dem Projekt bekanntmachen

eclipse-cdt-useexternalsource-04.jpg

Project -> Properties -> C/C++ Build -> Settings -> MinGW C Linker -> Miscellaneous

eclipse-cdt-useexternalsource-05.jpg

Hier auf das kleine grüne +-Symbol neben dem Text Include paths (-I) klicken. Man erhält einen kleinen Dialog mit dem man die Datei eintragen kann. Man kann Sourcedateien und Objectdateien eintragen.

eclipse-cdt-useexternalsource-06.jpg


Launch Konfiguration löschen

Beim Umbenennen oder Löschen von Projekten aktualisiert Eclipse CDT die Launch Configuration nicht oder nur unvollständig. Zu jeder Launch Konfiguration gehört eine xml-Datei im Verzeichnis

<eclipse workspace>/.metadata/.plugins/org.eclipse.debug.core/.launches

Sie trägt den Namen des Projekts, also etwa "MyProject Debug.launch". Man kann sie gefahrlos löschen und legt dann über Eclipse eine neue Launch Konfiguration an.


Permission denied Problem

When ein Build nicht funktioniert so kann das mehrere Ursachen haben. Meistens hat noch Fehler im Programm. Aber auch wenn das Programm fehlerfrei ist kann ein Build schiefgehen. Z. Bsp. wenn in der Fehlermeldung sinngemäß die folgende Zeile auftritt.

c:/mingw/bin/... .../mingw32/bin/ld.exe: cannot open output file foo.exe: Permission denied

In diesem Fall läuft das Programm noch und der Linker kann keine neue exe-Datei erzeugen. Man kann dann das Programm mit dem kleinen roten quadratischen Button beenden, der sich im Konsolfenster unterhalb des Codefenster auf der rechten Seite befindet. Es kann allerdings vorkommen, daß das Programm läuft und obwohl kein roter Button zum Beenden angezeigt wird. In diesem Fall öffnet man den Windows Task Manager und sucht nach dem entsprechenden Programm.


Rechtschreibprüfung abschalten

Eclipse hat eine Rechtschreibprüfung, die in der Grundeinstellung eingeschaltet ist. Dann werden unbekannte Wörter rot unterringelt. Das kann nützlich sein, ist aber meist eher störend. So schaltet man sie ab:

Window -> Preferences -> General -> Editors -> Text Editors -> Spelling -> [ ] Enable spell checking (aushaken)

Tastaturpufferproblem der Eclipsekonsole

Das folgende kleine Programm läuft nicht so wie erwartet.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   puts("Hello World"); /* prints Hello World */

   printf("Zahl eingeben: ");
   int zahl;
   scanf("%d", &zahl);
   printf("Die Zahl: %d", zahl);

   return EXIT_SUCCESS;
}

Die Konsole bleibt leer. Am kleinen roten Quadradt sieht man allerdings, daß das Programm noch läuft!

eclipse-keyboardbuffer-problem-01.jpg

Erhält das Konsolfenster den Fokus, so kann man eine Eingabe machen und erhält dann folgendes Ergebnis

eclipse-keyboardbuffer-problem-02.jpg

Die Nachbildung (Emulation) der Windowskonsole von Eclipse für C/C++ hat noch einen Fehler. Eclipse kann unter Windows den Ausgabepuffer (also stdout und stderr) nicht löschen, sobald ein Programm auch Eingaben über die Konsole anbietet.

Es gibt zwei Möglichkeiten, diesen Fehler zu beheben. Entweder man leert den Tastaturpuffer mit einer entsprechenden Anweisung nach jeder Ausgabe oder man setzt ein generelles Statement am Anfang von main. Natürlich ist die letztere Lösung die einfachere.

Die Kommandos zum Löschen der Puffer von stdout, stderr und stdin lauten. Sowieso muß man in C nach einer Eingabe den Eingabepuffer selbst löschen, da bei einer falschen Eingabe die Zeichen im Tastaturpuffer hängenbleiben und bei der nächsten Eingabe zu unerwarteten Ergebnissen führen können.

fflush(stdout)
fflush(stderr)
fflush(stdin)

Hier bieten sich Makros mit define an, etwa:

#define FLI fflush(stdin)
#define FLE fflush(stderr)
#define FLO fflush(stdout)

Das Programm sieht nun so aus.

#include <stdio.h>
#include <stdlib.h>

#define FLI fflush(stdin)
#define FLO fflush(stdout)

int main(void)
{
   puts("Hello World"); /* prints Hello World */
   printf("Zahl eingeben: "); FLO;  // muß vor scanf abgesetzt werden !
   int zahl;
   scanf("%d", &zahl); FLI;
   printf("Die Zahl: %d", zahl);

   return EXIT_SUCCESS;
}

Schöner ist eine generelle Lösung. Mit Hilfe der Funktion setbuf() oder setvbuf() läßt sich der Ausgabepuffer auf 0 setzen. Damit wird jede Ausgabe sofort nach stdout oder stderr geschrieben.

setbuf(stdout, NULL);
setbuf(stderr, NULL);

Identisch hierzu ist

setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0)

Beide Funktionen werden in stdio.h deklariert, siehe etwa en.cppreference.com/w/c/io/setbuf

Hier bietet sich wieder ein Makros an, etwa:

#define SETBUF  setbuf(stdout, NULL); setbuf(stderr, NULL)

Damit sieht unser Programm nun so aus.

#include <stdio.h>
#include <stdlib.h>

#define FLI fflush(stdin)
#define SETBUF setbuf(stdout, NULL); setbuf(stderr, NULL)

int main(void)
{
   SETBUF;

   puts("Hello World");
   printf("Zahl eingeben: ");
   int zahl;
   scanf("%d", &zahl); FLI;
   printf("Die Zahl: %d", zahl);
   return EXIT_SUCCESS;
}

Zeilenlänge des Editors ändern

Eclipse arbeitet mit einer Voreingestellten Zeilenlänge von 80 Buchstaben. Das ist für heutige Bildschirmauflösungen wenig. Besonders beim Nachformatieren von Code mit Hilfe von CTRL+SHIFT+F kommt es dabei zu unerwünschten Zeilenumbrüchen. Dies Einstellung kann man folgendermaßen ändern.

Window -> Preferences -> Code Style -> Edit (Button)

In dem jetzt erscheinenden Dialog aktiviert man das Tab Line Wrapping und trägt die gewünschte Zeilenlänge ein.

eclipse-cpp-linelength.jpg

Valid XHTML 1.0 Strict top Back Next Up Home