#include #define DBG(a,b,c) int main( int argc, char *argv[] ) { FILE *cf; int is_packed = 1; int is_two = 1; int is_four = 1; int is_eight = 1; int is_sixteen = 1; struct { char a; float b; } char_float; struct { float b; char a; } float_char; struct { char a; double b; } char_double; struct { double b; char a; } double_char; #ifdef HAVE_LONG_DOUBLE struct { char a; long double b; } char_long_double; struct { long double b; char a; } long_double_char; struct { long double a; int b; char c; } long_double_int_char; #endif int size, extent1, extent2; size = sizeof(char) + sizeof(float); extent1 = sizeof(char_float); extent2 = sizeof(float_char); if (size != extent1) is_packed = 0; if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0; if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0; if (sizeof(float) == 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0) is_eight = 0; DBG("char_float",size,extent1); size = sizeof(char) + sizeof(double); extent1 = sizeof(char_double); extent2 = sizeof(double_char); if (size != extent1) is_packed = 0; if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0; if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0; if (sizeof(double) == 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0) is_eight = 0; DBG("char_double",size,extent1); #ifdef HAVE_LONG_DOUBLE size = sizeof(char) + sizeof(long double); extent1 = sizeof(char_long_double); extent2 = sizeof(long_double_char); if (size != extent1) is_packed = 0; if ( (extent1 % 2) != 0 && (extent2 % 2) != 0) is_two = 0; if ( (extent1 % 4) != 0 && (extent2 % 4) != 0) is_four = 0; if (sizeof(long double) >= 8 && (extent1 % 8) != 0 && (extent2 % 8) != 0) is_eight = 0; if (sizeof(long double) > 8 && (extent1 % 16) != 0 && (extent2 % 16) != 0) is_sixteen = 0; DBG("char_long-double",size,extent1); extent1 = sizeof(long_double_int_char); if ( (extent1 % 2) != 0) is_two = 0; if ( (extent1 % 4) != 0) is_four = 0; if (sizeof(long double) >= 8 && (extent1 % 8) != 0) is_eight = 0; if (sizeof(long double) > 8 && (extent1 % 16) != 0) is_sixteen = 0; #else is_sixteen = 0; #endif if (is_sixteen) { is_eight = 0; is_four = 0; is_two = 0; } if (is_eight) { is_four = 0; is_two = 0; } if (is_four) is_two = 0; /* Tabulate the results */ cf = fopen( "ctest.out", "w" ); if (is_packed + is_two + is_four + is_eight + is_sixteen == 0) { fprintf( cf, "Could not determine alignment\n" ); } else { if (is_packed + is_two + is_four + is_eight + is_sixteen != 1) { fprintf( cf, "error!\n" ); } else { if (is_packed) fprintf( cf, "packed\n" ); if (is_two) fprintf( cf, "two\n" ); if (is_four) fprintf( cf, "four\n" ); if (is_eight) fprintf( cf, "eight\n" ); if (is_sixteen) fprintf( cf, "sixteen\n" ); } } fclose( cf ); return 0; }