Use —std-c89 to compile
in this mode.
Deviations from standard compliance:
- initialization of structure arrays must be fully braced.
struct s { char x } a[] = {1, 2}; /* invalid
in SDCC */
struct s { char x } a[] = {{1}, {2}}; /* OK
*/
- 'double' precision floating point not
supported. Instead a warning is emitted, and float is used instead.
long double is treated the same.
- K&R style function declarations are not
supported.
foo(i,j) /* this old style of function declarations */
int i,j; /* is valid in ANSI but not valid in SDCC */
{
...
}
Some features of this standard are not supported in some ports:
- pic14, pic16: structures and unions cannot
be passed as function parameters; hc08, s08, mos6502, pic14, pic16:
they cannot be a return value from a function,
e.g.:
struct s { ... };
struct s foo1 (struct
s parms) /* invalid in SDCC although allowed in ANSI */
{
struct s rets;
...
return rets; /* is invalid in SDCC although allowed
in ANSI */
}
- mcs51, ds390, hc08, s08, pdk13, pdk14, pdk15 and mos6502 ports: functions
are not reentrant unless explicitly declared as such or --stack-auto
is specified.