Web Analytics

igcc

⭐ 209 stars Dutch by alexandru-dinu

🌐 Taal

Interactieve GCC

tests contrib Code style: black

[!LET OP]
De originele repo van Andy Balaam is hier: https://codeberg.org/andybalaam/igcc.
In deze fork heb ik wat refactoring gedaan en geprobeerd het gebruiksgemak te vergroten.

[!WAARSCHUWING]
Dit project is een geïmproviseerde poging om een kortere feedbackloop te krijgen bij het werken met C/C++ in sommige gevallen en het is duidelijk niet bedoeld voor serieuze toepassingen.

Interactieve GCC (igcc) is een read-eval-print loop (REPL) voor C/C++. Het werkt door een basisbronbestand te manipuleren met gebruikerscommando's, compileert de bron na elke wijziging, voert het resulterende binaire bestand uit en verzamelt stdout & stderr. Meerdere regels (blok) invoer worden ondersteund, zodat je meerdere regels tegelijk kunt toevoegen en de compiler slechts één keer hoeft aan te roepen (zie voorbeelden hieronder).

Je kunt verschillende headerbestanden includen. Voor het gemak is een standaardheader toegevoegd: boilerplate.h. Ook is using namespace std; standaard niet beschikbaar, maar je kunt dit expliciet toevoegen (zie voorbeeld hieronder).

Verschillende aspecten van igcc kunnen worden geconfigureerd, zie config.yaml.

Aan de slag

De makkelijkste manier om te beginnen is door pipx te gebruiken:
pipx install git+https://github.com/alexandru-dinu/igcc.git
Als alternatief kun je ook uv gebruiken:
uv tool run git+https://github.com/alexandru-dinu/igcc
En voor ontwikkeling:
git clone https://github.com/alexandru-dinu/igcc.git
cd igcc
uv sync

Beschikbare argumenten:

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.

De code wordt gecompileerd met GCC (g++) en de resultaten (indien aanwezig) worden weergegeven. Typ .h voor hulp:

$ 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

Voorbeelden

$ 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; }

Invoer op meerdere regels wordt ondersteund (controleer multiline_marker in de configuratie). Het voordeel is dat meerdere aanroepen van de compiler worden vermeden.

$ 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
Je kunt kopteksten opnemen:

$ 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
Libs kunnen worden gelinkt:

$ 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!
Je kunt ook opdrachten ongedaan maken:

$ 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; }

... of opnieuw uitvoeren van eerder ongedaan gemaakte opdrachten:

$ 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; }

Toekomstig werk

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

Vergelijkbare projecten

Credits

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