#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; }