CBFalconer said:
Partially because gcc depends on local libraries, which are not
automatically updated, but belong to the individual system. I
believe most things that can be completely handled within the
compiler have been dealt with.
(This is about a specific compiler, but I claim it's topical because
it's also about the status of the C99 standard.)
Most, but not all. The items that, as far as I can tell, still
require compiler work are:
variable-length arrays
listed as "Broken"
complex (and imaginary) support in <complex.h>
This isn't listed as a library issue; I don't know why.
extended identifiers
Missing
extended integer types in <stdint.h>
Listed as Missing
I'm not sure what this one means. C99 allows, but does not
require, extended integer types. See C99 6.2.5p4. I'm not aware
that gcc provides any extended integer types -- but if it does,
there might be a requirement for <stdint.h> to use some of them.
IEC 60559 (also known as IEC 559 or IEEE arithmetic) support
Broken
inline functions
Broken
additional predefined macro names
Missing
I don't know what this refers to; gcc 4.1.1 seems to support all the
names specified in C99 6.10.8. See below for more information.
standard pragmas
Missing
I haven't looked into this.
Here's a program that shows the values of all the required and
optional predefined macros from 6.10.8:
#include <stdio.h>
int main(void)
{
#ifdef __DATE__
puts("__DATE__ = \"" __DATE__ "\"");
#else
printf("__DATE__ is not defined");
#endif
#ifdef __FILE__
puts("__FILE__ = \"" __FILE__ "\"");
#else
printf("__FILE__ is not defined");
#endif
#ifdef __LINE__
printf("__LINE__ = %d\n", (int)__LINE__);
#else
printf("__LINE__ is not defined");
#endif
#ifdef __STDC__
printf("__STDC__ = %d\n", (int)__STDC__);
#else
printf("__STDC__ is not defined");
#endif
#ifdef __STDC_HOSTED__
printf("__STDC_HOSTED__ = %d\n", (int)__STDC_HOSTED__);
#else
printf("__STDC_HOSTED__ is not defined");
#endif
#ifdef __STDC_VERSION__
printf("__STDC_VERSION__ = %ld\n", (long)__STDC_VERSION__);
#else
printf("__STDC_VERSION__ is not defined");
#endif
#ifdef __TIME__
puts("__TIME__ = \"" __TIME__ "\"");
#else
printf("__TIME__ is not defined");
#endif
#ifdef __STDC_IEC_559__
printf("__STDC_IEC_559__ = %d\n", (int)__STDC_IEC_559__);
#else
printf("__STDC_IEC_559__ is not defined");
#endif
#ifdef __STDC_IEC_559_COMPLEX__
printf("__STDC_IEC_559_COMPLEX__ = %d\n", (int)__STDC_IEC_559_COMPLEX__);
#else
printf("__STDC_IEC_559_COMPLEX__ is not defined");
#endif
#ifdef __STDC_ISO_10646__
printf("__STDC_ISO_10646__ = %ld\n", (long)__STDC_ISO_10646__);
#else
printf("__STDC_ISO_10646__ is not defined");
#endif
return 0;
}
And here's the output under gcc 4.1.1:
__DATE__ = "Jan 22 2007"
__FILE__ = "macros.c"
__LINE__ = 18
__STDC__ = 1
__STDC_HOSTED__ = 1
__STDC_VERSION__ = 199901
__TIME__ = "14:35:02"
__STDC_IEC_559__ = 1
__STDC_IEC_559_COMPLEX__ = 1
__STDC_ISO_10646__ = 200009
Possibly the web page doesn't reflect the latest release, and/or
perhaps some of the macro values don't quite reflect reality.