igcc icon indicating copy to clipboard operation
igcc copied to clipboard

Interactive GCC (igcc) is a read-eval-print loop (REPL) for C/C++ programmers. Cloned from http://www.artificialworlds.net/wiki/IGCC/IGCC

Interactive GCC

Interactive GCC (igcc) is a read-eval-print loop (REPL) for C/C++ programmers.

It can be used like this:

$ ./igcc g++> int a = 5; g++> a += 2; g++> cout << a << endl; 7 g++> --a; g++> cout << a << endl; 6 g++>

It is possible to include header files you need like this:

$ ./igcc g++> #include g++> vector myvec; g++> myvec.push_back( 17 ); g++> printf( "%d\n", myvec.size() ); 1 g++> myvec.push_back( 21 ); g++> printf( "%d\n", myvec.size() ); 2 g++>

It is possible to include your own functions using '.f':

g++> .f Functions paste mode is ON: Enter ".f" again to return to return to normal editing.

g++> int lastIndexOf(char *str, char c) { g++> int ind = -1; g++> for (int i=strlen(b)-1;i>=0;i--) { g++> if (b[i] == c) { g++> ind = i; g++> break; g++> } g++> } g++> return ind; g++> } g++> .f Functions paste mode is OFF

You can use '.p' to enter "Paste" mode to enter multi line snippets :

g++> .p Paste mode is ON: Enter ".p" again to return to return to normal editing.

g++> char c = ''; g++> char *a = (char *)malloc(80); g++> char b[] = "a_another_word_there_last"; g++> strcpy(a, b[lastIndexOf('')); g++> puts(a); g++> .p Paste mode is OFF

[Compile error - type .e to see it.]

Compile errors can be tolerated until the code works:

$ ./igcc g++> #include g++> map<string,int> hits; g++> hits["foo"] = 12; g++> hits["bar"] = 15; g++> for( map<string,int>::iterator it = hits.begin(); it != hits.end(); ++it ) [Compile error - type .e to see it.] g++> { [Compile error - type .e to see it.] g++> cout << it->first << " " << it->second << endl; [Compile error - type .e to see it.] g++> } bar 15 foo 12 g++>

Extra include directories can be supplied:

$ ./igcc -Itest/cpp -Itest/cpp2 g++> #include "hello.h" g++> hello(); Hello, g++> #include "world.h" g++> world(); world! g++>

Libs can be linked:

$ ./igcc -lm g++> #include "math.h" g++> cout << pow( 3, 3 ) << endl; // Actually a bad example since libm.a is already linked in C++ 27 g++>

Your own libs can be linked too:

$ ./igcc -Itest/cpp -Ltest/cpp -lmylib g++> #include "mylib.h" g++> defined_in_cpp(); defined_in_cpp saying hello. g++>

The cstdio, iostream and string headers are automatically included, and the std namespace is automatically in scope.

Downloading and using

Download the IGCC tarball from the Sourceforge download area:

https://sourceforge.net/projects/igcc/files/

Untar it like so:

tar -xjf igcc-0.1.tar.bz2

And then start the program like this:

cd igcc-0.1 ./igcc

Then type the C++ code you want to execute. It will be compiled with GCC and the results (if any) will be displayed.

Type .h to see some (minimal) help.

Developing

IGCC is a small python wrapper around GCC.

Check out the code here:

git clone git://igcc.git.sourceforge.net/gitroot/igcc/igcc

Or browse the source here:

http://igcc.git.sourceforge.net/git/gitweb.cgi?p=igcc/igcc;a=tree

Links

IGCC home page: http://www.artificialworlds.net/wiki/IGCC/IGCC

IGCC Sourceforge page: http://sourceforge.net/projects/igcc/

Andy Balaam's home page: http://www.artificialworlds.net

Andy Balaam's blog: http://www.artificialworlds.net/blog

Contact

Andy Balaam may be contacted on axis3x3 at users dot sourceforge dot net

Copyright

IGCC is Copyright (C) 2009 Andy Balaam

IGCC is Free Software released under the terms of the GNU General Public License version 2 or later.

IGCC comes with NO WARRANTY.

See the file COPYING for more information.