readme additions
This commit is contained in:
parent
b95ffff9f7
commit
a86c779e4e
78
README.md
78
README.md
|
@ -403,3 +403,81 @@ The variable RobotIsExploding can be written by your native C program and read
|
||||||
by picoc just like any other picoc variable. In this case it's protected from
|
by picoc just like any other picoc variable. In this case it's protected from
|
||||||
being written by the last parameter "IsWritable" being set to FALSE. Set it to
|
being written by the last parameter "IsWritable" being set to FALSE. Set it to
|
||||||
TRUE and picoc will be able to write it too.
|
TRUE and picoc will be able to write it too.
|
||||||
|
|
||||||
|
|
||||||
|
# How picoc differs from C90
|
||||||
|
|
||||||
|
picoc is a tiny C language, not a complete implementation of C90. It doesn't aim
|
||||||
|
to implement every single feature of C90 but it does aim to be close enough that
|
||||||
|
most programs will run without modification.
|
||||||
|
|
||||||
|
picoc also has scripting abilities which enhance it beyond what C90 offers.
|
||||||
|
|
||||||
|
## C preprocessor
|
||||||
|
There is no true preprocessor in picoc. The most popular preprocessor features
|
||||||
|
are implemented in a slightly limited way.
|
||||||
|
|
||||||
|
## #define
|
||||||
|
#define macros are implemented but have some limitations. They can only be used
|
||||||
|
as part of expressions and operate a bit like functions. Since they're used in
|
||||||
|
expressions they must result in a value.
|
||||||
|
|
||||||
|
## #if / #ifdef / #else / #endif
|
||||||
|
The conditional compilation operators are implemented, but have some limitations.
|
||||||
|
The operator "defined()" is not implemented. These operators can only be used at
|
||||||
|
statement boundaries.
|
||||||
|
|
||||||
|
## #include
|
||||||
|
#include is supported however the level of support depends on the specific port
|
||||||
|
of picoc on your platform. Linux/UNIX and cygwin support #include fully.
|
||||||
|
|
||||||
|
## Function declarations
|
||||||
|
This style of function declaration is supported:
|
||||||
|
|
||||||
|
```
|
||||||
|
int my_function(char param1, int param2, char *param3)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The old "K&R" form of function declaration is not supported.
|
||||||
|
|
||||||
|
## Predefined macros
|
||||||
|
A few macros are pre-defined:
|
||||||
|
|
||||||
|
* PICOC_VERSION - gives the picoc version as a string eg. "v2.1 beta r524"
|
||||||
|
* LITTLE_ENDIAN - is 1 on little-endian architectures or 0 on big-endian architectures
|
||||||
|
* BIG_ENDIAN - is 1 on big-endian architectures or 0 on little-endian architectures
|
||||||
|
|
||||||
|
##Function pointers
|
||||||
|
Pointers to functions are currently not supported.
|
||||||
|
|
||||||
|
##Storage classes
|
||||||
|
Many of the storage classes in C90 really only have meaning in a compiler so
|
||||||
|
they're not implemented in picoc. This includes: static, extern, volatile,
|
||||||
|
register and auto. They're recognised but currently ignored.
|
||||||
|
|
||||||
|
## struct and unions
|
||||||
|
Structs and unions can only be defined globally. It's not possible to define
|
||||||
|
them within the scope of a function.
|
||||||
|
|
||||||
|
Bitfields in structs are not supported.
|
||||||
|
|
||||||
|
## Linking with libraries
|
||||||
|
Because picoc is an interpreter (and not a compiler) libraries must be linked
|
||||||
|
with picoc itself. Also a glue module must be written to interface to picoc.
|
||||||
|
This is the same as other interpreters like python.
|
||||||
|
|
||||||
|
If you're looking for an example check the interface to the C standard library
|
||||||
|
time functions in cstdlib/time.c.
|
||||||
|
|
||||||
|
## goto
|
||||||
|
The goto statement is implemented, but only supports forward gotos, not backward.
|
||||||
|
The rationale for this is that backward gotos are not necessary for any
|
||||||
|
"legitimate" use of goto.
|
||||||
|
|
||||||
|
Some discussion on this topic:
|
||||||
|
|
||||||
|
* http://www.cprogramming.com/tutorial/goto.html
|
||||||
|
*http://kerneltrap.org/node/553/2131
|
||||||
|
|
Loading…
Reference in a new issue