diff options
| author | bellard <bellard> | 2001-12-16 21:23:42 +0000 |
|---|---|---|
| committer | bellard <bellard> | 2001-12-16 21:23:42 +0000 |
| commit | 5ee15844933fa9f16f05a69a32d467002cc1c69e (patch) | |
| tree | cc7af583d32168b39ba6dab519be7eb49f4188c7 /tcc-doc.texi | |
| parent | fbc51a39f96f36462185118033e6f9479c7d08a0 (diff) | |
| download | tinycc-5ee15844933fa9f16f05a69a32d467002cc1c69e.tar.gz tinycc-5ee15844933fa9f16f05a69a32d467002cc1c69e.tar.bz2 | |
tcc documentation
Diffstat (limited to 'tcc-doc.texi')
| -rw-r--r-- | tcc-doc.texi | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/tcc-doc.texi b/tcc-doc.texi new file mode 100644 index 0000000..f1930d7 --- /dev/null +++ b/tcc-doc.texi @@ -0,0 +1,172 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <title> Tiny C Compiler Reference Documentation </title> +</head> +<body> + +<center> +<h1> +Tiny C Compiler Reference Documentation +</h1> +</center> + +<h2>Introduction</h2> + +TinyCC (aka TCC) is a small but very fast C compiler. Unlike other C +compilers, it is meant to be self-suffisant: you do not need an +external assembler or linker because TCC does that for you. +<P> + +TCC compiles so fast that even for big projects <tt>Makefile</tt>s may +not be necessary. +<P> +TCC can also be used to make <I>C scripts</I>, +i.e. pieces of C source that you run as a Perl or Python +script. Compilation is so fast that your script will be as fast as if +it was an executable. + +<h2>Exact differences with ANSI C</h2> + +TCC implements almost all the ANSI C standard, except floating point +and long long numbers. + +<ul> + <li> The preprocessor tokens are the same as C. It means that in some + rare cases, preprocessed numbers are not handled exactly as in ANSI + C. This approach has the advantage of being simpler and FAST! + + <li> Floating point numbers are not fully supported yet (some + implicit casts are missing). + + <li> Some typing errors are not signaled. +</ul> + +<h2>ISOC99 extensions</h2> + +TCC implements many features of the new C standard: ISO C99. Currently +missing items are: complex and imaginary numbers (will come with ANSI +C floating point numbers), <tt>long long</tt>s and variable length +arrays. + +Currently implemented ISOC99 features: + +<ul> + +<li> <tt>'inline'</tt> keyword is ignored. + +<li> <tt>'restrict'</tt> keyword is ignored. + +<li> <tt>'__func__'</tt> is a string variable containing the current +function name. + +<li> Variadic macros: <tt>__VA_ARGS__</tt> can be used for + function-like macros: +<PRE> + #define dprintf(level, __VA_ARGS__) printf(__VA_ARGS__) +</PRE> +<tt>dprintf</tt> can then be used with a variable number of parameters. + +<li> Declarations can appear anywhere in a block as in C++. + +<li> Array and struct/union elements can be initialized in any order by + using designators: +<PRE> + struct { int x, y; } st[10] = { [0].x = 1, [0].y = 2 }; + + int tab[10] = { 1, 2, [5] = 5, [9] = 9}; +</PRE> + +<li> Compound initializers are supported: +<PRE> + int *p = (int []){ 1, 2, 3 }; +</PRE> +to initialize a pointer pointing to an initialized array. The same +works for structures and strings. + +<li> The boolean type <tt>'_Bool'</tt> is supported. + +<li> <tt>'long long'</tt> types not supported yet, except in type + definition or <tt>'sizeof'</tt>. + +<li> Hexadecimal floating point constants are supported: +<PRE> + double d = 0x1234p10; +</PRE> +is the same as writing +<PRE> + double d = 4771840.0; +</PRE> +</ul> + +<h2>GNU C extensions</h2> + +TCC implements some GNU C extensions which are found in many C sources: + +<ul> + +<li> array designators can be used without '=': +<PRE> + int a[10] = { [0] 1, [5] 2, 3, 4 }; +</PRE> + +<li> Structure field designators can be a label: +<PRE> + struct { int x, y; } st = { x: 1, y: 1}; +</PRE> +instead of +<PRE> + struct { int x, y; } st = { .x = 1, .y = 1}; +</PRE> + +<li> <tt>'\e'</tt> is ASCII character 27. + +</ul> + +<h2>TinyCC extensions</h2> + +I have added some extensions I find interesting: + +<ul> + +<li> <tt>__TINYC__</tt> is a predefined macro to <tt>'1'</tt> to +indicate that you use TCC. + +<li> <tt>'#!'</tt> at the start of a line is ignored to allow scripting. + +<li> Binary digits can be entered (<tt>'0b101'</tt> instead of +<tt>'5'</tt>). + +</ul> + +<h2> Command line invokation </h2> + +<PRE> +usage: tcc [-Idir] [-Dsym] [-llib] [-i infile] infile [infile_args...] +</PRE> + +<table> +<tr><td>'-Idir'</td> +<td>specify an additionnal include path. The default ones are: +/usr/include, /usr/lib/tcc, /usr/local/lib/tcc.</td> + +<tr><td>'-Dsym'</td> +<td>define preprocessor symbol 'sym' to 1.</td> + +<tr><td>'-lxxx'</td> +<td>dynamically link your program with library +libxxx.so. Standard library paths are checked, including those +specificed with LD_LIBRARY_PATH.</td> + +<tr><td>'-i file'</td> +<td>compile C source 'file' before main C source. With this +command, multiple C files can be compiled and linked together.</td> +</table> + +<hr> +Copyright (c) 2001 Fabrice Bellard <hr> +Fabrice Bellard - <em> fabrice.bellard at free.fr </em> - <A HREF="http://fabrice.bellard.free.fr/"> http://fabrice.bellard.free.fr/ </A> - <A HREF="http://www.tinycc.org/"> http://www.tinycc.org/ </A> + +</body> +</html> |
