Skip to content

shakna-israel/cnoevil

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CNoEvil - A Language Extension for C


Deprecation Notice

This has been deprecated, and should be replaced by the largely-compatible approach here.


Master: Build Status builds.sr.ht status

This is a pet project of mine, abusing the hell out of the C pre-processor, and other C language features, to create a language that is still technically C, but looks and behaves differently, whilst remaining fully compatible with C.

It takes a whole lot of bad ideas and mashes them into an abhorrent monstrosity.

#define EVIL_IO
#include "evil.h"

Main then
  displayln("Hello, World!");
end

A larger example of using CNoEvil is esh, a very basic shell.


Usage

CNoEvil is contained into a single C header file, evil.h. Drop that file somewhere in your include path.

You will need a C compiler capable of the C11 standard, and some optional features may require a GNU compiler.

Define which modules you want to use, or not use, and then include it.

#define EVIL_IO
#define EVIL_NO_CONSTANT
#include "evil.h"

Main then
  displayln("It works!");
end

For the full usage, compile and run:

#define EVIL_HELP
#include "evil.h"

Main then
  evil_manual();
end

For individual help, compile and run:

#define EVIL_HELP
#include "evil.h"

Main then
  evil_explain("constant");
end

Where the string is the name of what you wish to look up.

If that still fails you, open an Issue on GitHub, and I'll try and help.


Versioning

I plan to have very feature and every bugfix have it's own number increment, so numbers may rapidly increase.

I'm roughly following semantic versioning.

Thus:

MAJOR.FEATURE.BUGFIX

MAJOR will only change with breaking API behaviour, and will be avoided.

FEATURE will bump every time something new is added to the library.

BUGFIX will bump every time we get a new bugfix.

FEATURE and BUGFIX will only ever revert to 0 if MAJOR increments.

So, for example, this kind of version would be possible:

1.256.893


License

... You actually want to use this?

Really?

Okay... See LICENSE.md.