LightWeight C++
C xBase C++ Other
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
cdb.c import original lwc Dec 28, 2010
config.h compile and example ouput for exception May 4, 2016
cpp.c import original lwc Dec 28, 2010
dcl.c import original lwc Dec 28, 2010
hier.c import original lwc Dec 28, 2010
preproc.c import original lwc Dec 28, 2010
rexpr.c import original lwc Dec 28, 2010
util.c import original lwc Dec 28, 2010


The Lightweight C++ Preprocessor

The lightweight c++ preprocessor adds a rich set of extensions
to the C programming language -- some of which are borrowed from
C++ and some new ones.

Supported Systems

lwc has only been tested on a gcc-3.2/glibc system.
Anything else may not work.

In order to run lwc there must be a C preprocessor "cpp"
In order to use the code produced by lwc
 the compiler must support C99 and some common GNU-C extensions
 and the linker must support ".gnu.linkonce" sections


To install lwc type 'make'

Hopefully the executable "lwc" will appear in objdir.

The simple way to use lwc is with the command:

	lwc file.c

The command line arguments of lwc are the same of
the C preprocessor 'cpp'.

The generated C code is printed on stdout.


Usually in makefiles lwc code will be compiled with two

	file.o: file.i
		gcc file.i -o file.o -fexceptions

	file.i: file.c header.h
		lwc file.c > file.i

It's a very good idea to have the latest version of "indent".
lwc does not detect all errors and very often you may have
to browse through the generated C code to see what's wrong.

In this first release of lwc, debugging information is compiled in
and you can create a file /tmp/LWCD_OUTPUT_INDENTED to force
lwc to automatically pass the output through "indent".
(create this file right now if you want)

If the version of indent in your system is < 2 then you'd better
download the latest version which is >= 2.2.9
Old versions can't format compound statements in expressions.

What can you do with lwc

1. Program !

2. Study C++ to C conversion basics

3. Add new features to the lwc language

4. Do advanced OOP language research / test new stuff for the next C++

5. ??

6. Profit!


  Unlike other languages you are not forced to use OOP features.
You can simply use lwc for the structure-by-reference convenience,
for the member functions or even just for the ability to omit
'struct' and 'enum'.  You are not forced to consider "everything is
an object".

  If you want to use lwc for programming read the short tutorial in 'doc'
and have a look at the sample lwc programs included in the package.

  At the moment lwc may support some weird things and may not support others.
For an example of "weird thing", a structure can be declared in a cast.

  The fact that this works does not mean you should do it: It may be disabled
in a future version and your program will no longer compile. 
So use common sense.  lwc works fine with all the reasonable things you may
ever need to do.

  If you are distributing executables then you can go directly into using lwc.

  If you don't want to bother with executables and you prefer giving the
source, then you should know that lwc needs to be installed on the
target system.  The C code produced from lwc is preprocessed and therefore
very possibly not portable.  Of course you can demand library/architecture
compatibility, but this is as bad as executables.

 On the other hand, because lwc functions can call normal C functions
you can include plain C files in your lwc code, which are wrappers
to the system's libraries.  lwc code can call these wrappers instead
of including system header files.

 In this sense lwc gives a new meaning to open source.  It is possible
to distribute only the generated C files and not the lwc ones.  This way
others can study the code but they can't edit it.  We are against that.
But it is possible to give the lwc code by request to track the hacker base.

Adding new Features
		``making standards is quite a challenge.
		  breaking through them is quite another''

  Adding new features to the language is very easy.  We can have delegates
tomorrow.  C++-like templates *are* possible. It's also easy to implement
operator overloading for all the operators, pointer-to-member operators,
contracts, attributes, properties, singletons  and generally everything
you see in other programming languages.  

  On the other hand, it is believed that designing a programming language is not
only about the imagination to conceive features but also about the wisdom
to avoid some of them.  This is the K&R logic as displayed in the excellent
book "The C Programming Language".  We wouldn't want to become the most
over-bloated programming language of the world - C is a spartan language

Anyway, there's a mailing list for lwc news, bugs, devel and discussion at:


  If lwc crashes or produces invalid C code, be patient. Please post a
report to the mailing list and it will be fixed ASAP.


lwc initial versions written & Copyright (C) 2003, 2004 Stelios Xanthakis.

lwc latest download: