Web Analytics

igcc

⭐ 209 stars German by alexandru-dinu

🌐 Sprache

Interaktives GCC

tests contrib Code style: black

[!HINWEIS]
Das Original-Repository von Andy Balaam ist hier: https://codeberg.org/andybalaam/igcc.
In diesem Fork habe ich einige Refaktorierungen vorgenommen und versucht, die Nutzung zu erleichtern.

[!WARNUNG]
Dieses Projekt ist ein hackiger Versuch, in bestimmten Fällen eine kürzere Feedback-Schleife beim Arbeiten mit C/C++ zu erreichen, und ist offensichtlich nicht für ernsthafte Einsätze gedacht.

Das Interactive GCC (igcc) ist eine Read-Eval-Print-Loop (REPL) für C/C++. Es funktioniert, indem eine Basis-Quelldatei mit Benutzerbefehlen manipuliert wird, kompiliert die Quelle nach jeder Änderung, führt das resultierende Binary aus und sammelt dessen stdout & stderr. Mehrzeilige (Block-)Eingaben werden unterstützt, sodass Sie mehrere Zeilen auf einmal hinzufügen und den Compiler nur einmal aufrufen können (siehe Beispiele unten).

Sie können verschiedene Header-Dateien einbinden. Der Einfachheit halber ist ein Standard-Header enthalten: boilerplate.h. Außerdem ist using namespace std; standardmäßig nicht verfügbar, kann aber explizit hinzugefügt werden (siehe Beispiel unten).

Verschiedene Aspekte von igcc können konfiguriert werden, siehe config.yaml.

Erste Schritte

Der einfachste Weg, um loszulegen, ist die Verwendung von pipx:
pipx install git+https://github.com/alexandru-dinu/igcc.git
Alternativ können Sie auch uv verwenden:
uv tool run git+https://github.com/alexandru-dinu/igcc
Und für Entwickler:
git clone https://github.com/alexandru-dinu/igcc.git
cd igcc
uv sync

Verfügbare Argumente:

usage: igcc [-h] [-I INCLUDE [INCLUDE ...]] [-L LIBDIR [LIBDIR ...]]
            [-l LIB [LIB ...]]

options: -h, --help show this help message and exit -I INCLUDE [INCLUDE ...] Add INCLUDE to the list of directories to be searched for header files. -L LIBDIR [LIBDIR ...] Add LIBDIR to the list of directories to be searched for library files. -l LIB [LIB ...] Search the library LIB when linking.

Der Code wird mit GCC (g++) kompiliert und die Ergebnisse (sofern vorhanden) werden angezeigt. Geben Sie .h für Hilfe ein:

$ igcc
[1]> .h
.h  Show this help message
.e  Show the last compile errors/warnings
.l  List the code you have entered
.L  List the whole program as given to the compiler
.r  Redo undone command
.u  Undo previous command
.q  Quit

Beispiele

$ igcc
[1]> int a = 5;
[2]> a += 2;
[3]> using namespace std;
[4]> cout << a << endl;
7

[5]> int b = 17; [6]> a *= b; [7]> cout << a << ", " << b << endl; 119, 17

[8]> .L #include "boilerplate.h" using namespace std;

int main(void) { int a = 5; a += 2; cout << a << endl; int b = 17; a *= b; cout << a << ", " << b << endl;

return 0; }

Mehrzeilige Eingabe wird unterstützt (siehe multiline_marker in der Konfiguration). Der Vorteil besteht darin, mehrere Compileraufrufe zu vermeiden.

$ igcc
[1]> .m
... for (int i = 0; i < 10; i++) {
...   std::cout << i << " ";
... }
... std::cout << "\n";
... .m
0 1 2 3 4 5 6 7 8 9
Sie können Kopfzeilen einfügen:

$ igcc
[1]> #include 
[2]> std::vector xs{1,2,3};
[3]> xs.push_back(17);
[4]> .m
... for (auto x : xs) {
...   std::cout << x << " ";
... }
... .m
1 2 3 17
Bibliotheken können gelinkt werden:

$ igcc -lpthread
[  1]> #include 
[  2]> pthread_t thr;
[  3]> const char* msg = "Hello, World!";
[  4]> // assuming print_msg is defined somewhere
[  5]> int ret = pthread_create(&thr, NULL, print_msg, (void*) msg); pthread_join(thr, NULL);
Hello, World!

Sie können Befehle auch rückgängig machen:

$ igcc
[1]> int x = 2
 Compile error - type .e to see it

[2]> .e : In function ‘int main()’: :7:5: error: expected ‘,’ or ‘;’ before ‘return’ :5:9: warning: unused variable ‘x’ [-Wunused-variable]

[2]> .u Undone int x = 2 [1]> int x = 2; [2]> .L #include "boilerplate.h"

int main(void) { int x = 2;

return 0; }

... oder wiederholen zuvor rückgängig gemachte Befehle:

$ igcc
[1]> int x = 2;
[2]> std::cout << x;
2
[3]> .u
Undone std::cout << x;
[2]> .L
#include "boilerplate.h"

int main(void) { int x = 2;

return 0; } [2]> .r Redone std::cout << x; 2 [3]> .L #include "boilerplate.h"

int main(void) { int x = 2; std::cout << x;

return 0; }

Zukünftige Arbeiten

Siehe https://github.com/alexandru-dinu/igcc/issues

Ähnliche Projekte

Danksagungen

--- Tranlated By Open Ai Tx | Last indexed: 2025-12-11 ---