|
5.10.1 Specific Compiler Characteristics
Some compilers exhibit different behaviors.
- Static/Dynamic Expressions
- Autoconf relies on a trick to extract one bit of information from the C
compiler: using negative array sizes. For instance the following
excerpt of a C source demonstrates how to test whether ‘int’ objects are 4
bytes wide:
int
main (void)
{
static int test_array [sizeof (int) == 4 ? 1 : -1];
test_array [0] = 0;
return 0;
}
To our knowledge, there is a single compiler that does not support this
trick: the HP C compilers (the real one, not only the “bundled”) on
HP-UX 11.00. They incorrectly reject the above program with the diagnostic
“Variable-length arrays cannot have static storage.”
This bug comes from HP compilers' mishandling of sizeof (int) ,
not from the ? 1 : -1 , and
Autoconf works around this problem by casting sizeof (int) to
long int before comparing it.
|
|