This page is for "work in progress" for C68 and has versions of software that are still experimental in nature, or are in late stages of testing. The software on this page will have new features that are not yet fully tested, so these versions may be unstable and/or cause your system to crash. Use these versions of the software at your own risk.
The ISO 1999 C standard introduces a large number of new facilities to the C language. To support these the C68 compiler and associated programs will need updating. If you want more information on the standard then you can go to the site http://anubis.dkuug.dk/JTC1/SC22/WG14/ which is the home page for the standards committee that defines the ISO C standard.
The following summarises where we are in terms of updates are currently being worked on:
The first version of C68 that supports features of this new standard will be Release 5.0. It is intended that when there is sufficient of the new standard implemented to be useful we will make some early releases to the developer community to get early feedback, and progressively add the missing facilities in subsequent point releases.
Note We do not make any committment to ever complete the implementation of the ISO C 1999 standard. We develop and suppor the C68 compiler as a hobby, and if it gets to hard to implement some of the features we are likely not to bother.The following table is a summary list of the changes in the new standard and the progress we have made so far on implementing the changes
New Feature |
Status |
restricted character set support via diagraphs and <iso646.h> | |
wide character library support in <wchar.h> and <wctype.h> | |
more precise aliasing rules via effective type | |
restricted pointers | Keywords recognised by compiler. Not used yet by code generator |
variable-length arrays | |
flexible array members | |
static and type qualifiers in parameter array declarators | |
complex (and imaginary) support in <complex.h> | Keywords recognised by compiler. No code generator support yet in place |
type-generic math macros in <tgmath.h> | |
long long int data type | Compiler support for long long type completed, including library support routines needed by compiler. |
long long int type library functions | New long long library functions defined by standard still outstanding |
increased minimum translation limits | C68 already met the specified requirements |
additional floating-point characteristics in <float.h> | Supported |
remove implicit int | Supported. |
reliable integer division | |
universal character names (\u and \U) | |
extended identifiers | |
hexadecimal floating point constants and %a/%A printf/scanf conversion specifiers | |
compound literals | |
designated initializers | |
// comments | Supported |
extended integer types and library functions in <inttypes.h> and <stdint.h> | |
remove implicit function declaration | Supported |
pre-processor arithmetic done in intmax_t / uintmax_t | |
mixed declarations and code | |
new block scopes for selection and iteration statements | |
integer constant type rules | Supported |
integer promotion rules | Supported |
macros with a variable number of arguments | |
the vsscanf family of functions in <stdio.h> and <wchar.h> | |
additional math library functions in <math.h> | |
floating point environment access in <fenv.h> | |
IEC 60559 (also known as IEC559 or IEEE arithmetic) support | |
trailing comma allowed in enum declaration | Supported |
%lf conversion specifier allowed in printf | |
inline functions | Keyword recognised. No code generator support (this is optional in the standard but we intend to have a go at it). |
the snprintf family of functions in <stdio.h> | Supported |
boolean type in <stdbool.h> | |
idempotent type qualifiers | |
empty macro arguments | |
new struct type compatibility rules (tag compatibility) | |
additional predefined macro names | |
_Pragma preprocessing operator | |
standard pragmas | |
__func__ predefined identifier | Supported |
VA_COPY macro | Supported |
additional strftime conversion specifiers | supported |
LIA compatibility annex | |
deprecate ungetc at the beginning of a binary file | |
remove deprecation of aliased array pointers | |
conversion of array to pointer not limited to lvalues | |
relaxed constraints on aggregate and union initialisation | |
relaxed restrictions on portable header names | |
return without a value not permitted in functions that return a value (and vice versa) | Supported |
In addition to the changes to meet the new standard that are listed in the table above, the following changes have been introduced:
Data Type |
Status |
long long | Implemented for Motorola 68K processors only |
long double | Implemented for Motorola 68K processors only |
imaginary | Not implemented for any processor type |
complex | Not implemented for any processor type |