1 #include <stdio.h> 2 #include <stddef.h> 3 4 static struct {} s0; 5 static union {} u0; 6 static struct {int :0;} s1; 7 static union {int :0;} u1; 8 static struct {char m;} s2; 9 static union {char m;} u2; 10 static struct {short m;} s3; 11 static union {short m;} u3; 12 static struct {int m;} s4; 13 static union {int m;} u4; 14 static struct {long m;} s5; 15 static union {long m;} u5; 16 static struct {long long m;} s6; 17 static union {long long m;} u6; 18 static struct {char * m;} s7; 19 static union {char * m;} u7; 20 static struct {float m;} s8; 21 static union {float m;} u8; 22 static struct {double m;} s9; 23 static union {double m;} u9; 24 static struct {long double m;} s10; 25 static union {long double m;} u10; 26 static struct {ptrdiff_t m;} s11; 27 static union {ptrdiff_t m;} u11; 28 static struct {size_t m;} s12; 29 static union {size_t m;} u12; 30 static struct {wchar_t m;} s13; 31 static union {wchar_t m;} u13; 32 static struct {struct {char m;}m;} s14; 33 static union {struct {char m;}m;} u14; 34 static struct {union {char m;}m;} s15; 35 static union {union {char m;}m;} u15; 36 static struct {struct {short m;}m;} s16; 37 static union {struct {short m;}m;} u16; 38 static struct {union {short m;}m;} s17; 39 static union {union {short m;}m;} u17; 40 static struct {struct {int m;}m;} s18; 41 static union {struct {int m;}m;} u18; 42 static struct {union {int m;}m;} s19; 43 static union {union {int m;}m;} u19; 44 static struct {struct {long m;}m;} s20; 45 static union {struct {long m;}m;} u20; 46 static struct {union {long m;}m;} s21; 47 static union {union {long m;}m;} u21; 48 static struct {struct {long long m;}m;} s22; 49 static union {struct {long long m;}m;} u22; 50 static struct {union {long long m;}m;} s23; 51 static union {union {long long m;}m;} u23; 52 static struct {struct {char * m;}m;} s24; 53 static union {struct {char * m;}m;} u24; 54 static struct {union {char * m;}m;} s25; 55 static union {union {char * m;}m;} u25; 56 static struct {struct {float m;}m;} s26; 57 static union {struct {float m;}m;} u26; 58 static struct {union {float m;}m;} s27; 59 static union {union {float m;}m;} u27; 60 static struct {struct {double m;}m;} s28; 61 static union {struct {double m;}m;} u28; 62 static struct {union {double m;}m;} s29; 63 static union {union {double m;}m;} u29; 64 static struct {struct {long double m;}m;} s30; 65 static union {struct {long double m;}m;} u30; 66 static struct {union {long double m;}m;} s31; 67 static union {union {long double m;}m;} u31; 68 static struct {struct {ptrdiff_t m;}m;} s32; 69 static union {struct {ptrdiff_t m;}m;} u32; 70 static struct {union {ptrdiff_t m;}m;} s33; 71 static union {union {ptrdiff_t m;}m;} u33; 72 static struct {struct {size_t m;}m;} s34; 73 static union {struct {size_t m;}m;} u34; 74 static struct {union {size_t m;}m;} s35; 75 static union {union {size_t m;}m;} u35; 76 static struct {struct {wchar_t m;}m;} s36; 77 static union {struct {wchar_t m;}m;} u36; 78 static struct {union {wchar_t m;}m;} s37; 79 static union {union {wchar_t m;}m;} u37; 80 static struct {struct {}m;} s38; 81 static union {struct {}m;} u38; 82 static struct {union {}m;} s39; 83 static union {union {}m;} u39; 84 static struct {struct {int :0;}m;} s40; 85 static union {struct {int :0;}m;} u40; 86 static struct {union {int :0;}m;} s41; 87 static union {union {int :0;}m;} u41; 88 static struct {char m [0];} s42; 89 static union {char m [0];} u42; 90 static struct {short m [0];} s43; 91 static union {short m [0];} u43; 92 static struct {int m [0];} s44; 93 static union {int m [0];} u44; 94 static struct {long m [0];} s45; 95 static union {long m [0];} u45; 96 static struct {long long m [0];} s46; 97 static union {long long m [0];} u46; 98 static struct {char * m [0];} s47; 99 static union {char * m [0];} u47; 100 static struct {float m [0];} s48; 101 static union {float m [0];} u48; 102 static struct {double m [0];} s49; 103 static union {double m [0];} u49; 104 static struct {long double m [0];} s50; 105 static union {long double m [0];} u50; 106 static struct {ptrdiff_t m [0];} s51; 107 static union {ptrdiff_t m [0];} u51; 108 static struct {size_t m [0];} s52; 109 static union {size_t m [0];} u52; 110 static struct {wchar_t m [0];} s53; 111 static union {wchar_t m [0];} u53; main(void)112int main (void) { 113 int min_size = 0; 114 int min_align = 0; 115 printf ("+++Minimal struct size/alignment:\n"); 116 if (min_size > sizeof (s0)) 117 min_size = sizeof (s0); 118 if (min_align > __alignof__ (s0)) 119 min_align = __alignof__ (s0); 120 if (min_size > sizeof (u0)) 121 min_size = sizeof (u0); 122 if (min_align > __alignof__ (u0)) 123 min_align = __alignof__ (u0); 124 if (min_size > sizeof (s1)) 125 min_size = sizeof (s1); 126 if (min_align > __alignof__ (s1)) 127 min_align = __alignof__ (s1); 128 if (min_size > sizeof (u1)) 129 min_size = sizeof (u1); 130 if (min_align > __alignof__ (u1)) 131 min_align = __alignof__ (u1); 132 if (min_size > sizeof (s2)) 133 min_size = sizeof (s2); 134 if (min_align > __alignof__ (s2)) 135 min_align = __alignof__ (s2); 136 if (min_size > sizeof (u2)) 137 min_size = sizeof (u2); 138 if (min_align > __alignof__ (u2)) 139 min_align = __alignof__ (u2); 140 if (min_size > sizeof (s3)) 141 min_size = sizeof (s3); 142 if (min_align > __alignof__ (s3)) 143 min_align = __alignof__ (s3); 144 if (min_size > sizeof (u3)) 145 min_size = sizeof (u3); 146 if (min_align > __alignof__ (u3)) 147 min_align = __alignof__ (u3); 148 if (min_size > sizeof (s4)) 149 min_size = sizeof (s4); 150 if (min_align > __alignof__ (s4)) 151 min_align = __alignof__ (s4); 152 if (min_size > sizeof (u4)) 153 min_size = sizeof (u4); 154 if (min_align > __alignof__ (u4)) 155 min_align = __alignof__ (u4); 156 if (min_size > sizeof (s5)) 157 min_size = sizeof (s5); 158 if (min_align > __alignof__ (s5)) 159 min_align = __alignof__ (s5); 160 if (min_size > sizeof (u5)) 161 min_size = sizeof (u5); 162 if (min_align > __alignof__ (u5)) 163 min_align = __alignof__ (u5); 164 if (min_size > sizeof (s6)) 165 min_size = sizeof (s6); 166 if (min_align > __alignof__ (s6)) 167 min_align = __alignof__ (s6); 168 if (min_size > sizeof (u6)) 169 min_size = sizeof (u6); 170 if (min_align > __alignof__ (u6)) 171 min_align = __alignof__ (u6); 172 if (min_size > sizeof (s7)) 173 min_size = sizeof (s7); 174 if (min_align > __alignof__ (s7)) 175 min_align = __alignof__ (s7); 176 if (min_size > sizeof (u7)) 177 min_size = sizeof (u7); 178 if (min_align > __alignof__ (u7)) 179 min_align = __alignof__ (u7); 180 if (min_size > sizeof (s8)) 181 min_size = sizeof (s8); 182 if (min_align > __alignof__ (s8)) 183 min_align = __alignof__ (s8); 184 if (min_size > sizeof (u8)) 185 min_size = sizeof (u8); 186 if (min_align > __alignof__ (u8)) 187 min_align = __alignof__ (u8); 188 if (min_size > sizeof (s9)) 189 min_size = sizeof (s9); 190 if (min_align > __alignof__ (s9)) 191 min_align = __alignof__ (s9); 192 if (min_size > sizeof (u9)) 193 min_size = sizeof (u9); 194 if (min_align > __alignof__ (u9)) 195 min_align = __alignof__ (u9); 196 if (min_size > sizeof (s10)) 197 min_size = sizeof (s10); 198 if (min_align > __alignof__ (s10)) 199 min_align = __alignof__ (s10); 200 if (min_size > sizeof (u10)) 201 min_size = sizeof (u10); 202 if (min_align > __alignof__ (u10)) 203 min_align = __alignof__ (u10); 204 if (min_size > sizeof (s11)) 205 min_size = sizeof (s11); 206 if (min_align > __alignof__ (s11)) 207 min_align = __alignof__ (s11); 208 if (min_size > sizeof (u11)) 209 min_size = sizeof (u11); 210 if (min_align > __alignof__ (u11)) 211 min_align = __alignof__ (u11); 212 if (min_size > sizeof (s12)) 213 min_size = sizeof (s12); 214 if (min_align > __alignof__ (s12)) 215 min_align = __alignof__ (s12); 216 if (min_size > sizeof (u12)) 217 min_size = sizeof (u12); 218 if (min_align > __alignof__ (u12)) 219 min_align = __alignof__ (u12); 220 if (min_size > sizeof (s13)) 221 min_size = sizeof (s13); 222 if (min_align > __alignof__ (s13)) 223 min_align = __alignof__ (s13); 224 if (min_size > sizeof (u13)) 225 min_size = sizeof (u13); 226 if (min_align > __alignof__ (u13)) 227 min_align = __alignof__ (u13); 228 if (min_size > sizeof (s14)) 229 min_size = sizeof (s14); 230 if (min_align > __alignof__ (s14)) 231 min_align = __alignof__ (s14); 232 if (min_size > sizeof (u14)) 233 min_size = sizeof (u14); 234 if (min_align > __alignof__ (u14)) 235 min_align = __alignof__ (u14); 236 if (min_size > sizeof (s15)) 237 min_size = sizeof (s15); 238 if (min_align > __alignof__ (s15)) 239 min_align = __alignof__ (s15); 240 if (min_size > sizeof (u15)) 241 min_size = sizeof (u15); 242 if (min_align > __alignof__ (u15)) 243 min_align = __alignof__ (u15); 244 if (min_size > sizeof (s16)) 245 min_size = sizeof (s16); 246 if (min_align > __alignof__ (s16)) 247 min_align = __alignof__ (s16); 248 if (min_size > sizeof (u16)) 249 min_size = sizeof (u16); 250 if (min_align > __alignof__ (u16)) 251 min_align = __alignof__ (u16); 252 if (min_size > sizeof (s17)) 253 min_size = sizeof (s17); 254 if (min_align > __alignof__ (s17)) 255 min_align = __alignof__ (s17); 256 if (min_size > sizeof (u17)) 257 min_size = sizeof (u17); 258 if (min_align > __alignof__ (u17)) 259 min_align = __alignof__ (u17); 260 if (min_size > sizeof (s18)) 261 min_size = sizeof (s18); 262 if (min_align > __alignof__ (s18)) 263 min_align = __alignof__ (s18); 264 if (min_size > sizeof (u18)) 265 min_size = sizeof (u18); 266 if (min_align > __alignof__ (u18)) 267 min_align = __alignof__ (u18); 268 if (min_size > sizeof (s19)) 269 min_size = sizeof (s19); 270 if (min_align > __alignof__ (s19)) 271 min_align = __alignof__ (s19); 272 if (min_size > sizeof (u19)) 273 min_size = sizeof (u19); 274 if (min_align > __alignof__ (u19)) 275 min_align = __alignof__ (u19); 276 if (min_size > sizeof (s20)) 277 min_size = sizeof (s20); 278 if (min_align > __alignof__ (s20)) 279 min_align = __alignof__ (s20); 280 if (min_size > sizeof (u20)) 281 min_size = sizeof (u20); 282 if (min_align > __alignof__ (u20)) 283 min_align = __alignof__ (u20); 284 if (min_size > sizeof (s21)) 285 min_size = sizeof (s21); 286 if (min_align > __alignof__ (s21)) 287 min_align = __alignof__ (s21); 288 if (min_size > sizeof (u21)) 289 min_size = sizeof (u21); 290 if (min_align > __alignof__ (u21)) 291 min_align = __alignof__ (u21); 292 if (min_size > sizeof (s22)) 293 min_size = sizeof (s22); 294 if (min_align > __alignof__ (s22)) 295 min_align = __alignof__ (s22); 296 if (min_size > sizeof (u22)) 297 min_size = sizeof (u22); 298 if (min_align > __alignof__ (u22)) 299 min_align = __alignof__ (u22); 300 if (min_size > sizeof (s23)) 301 min_size = sizeof (s23); 302 if (min_align > __alignof__ (s23)) 303 min_align = __alignof__ (s23); 304 if (min_size > sizeof (u23)) 305 min_size = sizeof (u23); 306 if (min_align > __alignof__ (u23)) 307 min_align = __alignof__ (u23); 308 if (min_size > sizeof (s24)) 309 min_size = sizeof (s24); 310 if (min_align > __alignof__ (s24)) 311 min_align = __alignof__ (s24); 312 if (min_size > sizeof (u24)) 313 min_size = sizeof (u24); 314 if (min_align > __alignof__ (u24)) 315 min_align = __alignof__ (u24); 316 if (min_size > sizeof (s25)) 317 min_size = sizeof (s25); 318 if (min_align > __alignof__ (s25)) 319 min_align = __alignof__ (s25); 320 if (min_size > sizeof (u25)) 321 min_size = sizeof (u25); 322 if (min_align > __alignof__ (u25)) 323 min_align = __alignof__ (u25); 324 if (min_size > sizeof (s26)) 325 min_size = sizeof (s26); 326 if (min_align > __alignof__ (s26)) 327 min_align = __alignof__ (s26); 328 if (min_size > sizeof (u26)) 329 min_size = sizeof (u26); 330 if (min_align > __alignof__ (u26)) 331 min_align = __alignof__ (u26); 332 if (min_size > sizeof (s27)) 333 min_size = sizeof (s27); 334 if (min_align > __alignof__ (s27)) 335 min_align = __alignof__ (s27); 336 if (min_size > sizeof (u27)) 337 min_size = sizeof (u27); 338 if (min_align > __alignof__ (u27)) 339 min_align = __alignof__ (u27); 340 if (min_size > sizeof (s28)) 341 min_size = sizeof (s28); 342 if (min_align > __alignof__ (s28)) 343 min_align = __alignof__ (s28); 344 if (min_size > sizeof (u28)) 345 min_size = sizeof (u28); 346 if (min_align > __alignof__ (u28)) 347 min_align = __alignof__ (u28); 348 if (min_size > sizeof (s29)) 349 min_size = sizeof (s29); 350 if (min_align > __alignof__ (s29)) 351 min_align = __alignof__ (s29); 352 if (min_size > sizeof (u29)) 353 min_size = sizeof (u29); 354 if (min_align > __alignof__ (u29)) 355 min_align = __alignof__ (u29); 356 if (min_size > sizeof (s30)) 357 min_size = sizeof (s30); 358 if (min_align > __alignof__ (s30)) 359 min_align = __alignof__ (s30); 360 if (min_size > sizeof (u30)) 361 min_size = sizeof (u30); 362 if (min_align > __alignof__ (u30)) 363 min_align = __alignof__ (u30); 364 if (min_size > sizeof (s31)) 365 min_size = sizeof (s31); 366 if (min_align > __alignof__ (s31)) 367 min_align = __alignof__ (s31); 368 if (min_size > sizeof (u31)) 369 min_size = sizeof (u31); 370 if (min_align > __alignof__ (u31)) 371 min_align = __alignof__ (u31); 372 if (min_size > sizeof (s32)) 373 min_size = sizeof (s32); 374 if (min_align > __alignof__ (s32)) 375 min_align = __alignof__ (s32); 376 if (min_size > sizeof (u32)) 377 min_size = sizeof (u32); 378 if (min_align > __alignof__ (u32)) 379 min_align = __alignof__ (u32); 380 if (min_size > sizeof (s33)) 381 min_size = sizeof (s33); 382 if (min_align > __alignof__ (s33)) 383 min_align = __alignof__ (s33); 384 if (min_size > sizeof (u33)) 385 min_size = sizeof (u33); 386 if (min_align > __alignof__ (u33)) 387 min_align = __alignof__ (u33); 388 if (min_size > sizeof (s34)) 389 min_size = sizeof (s34); 390 if (min_align > __alignof__ (s34)) 391 min_align = __alignof__ (s34); 392 if (min_size > sizeof (u34)) 393 min_size = sizeof (u34); 394 if (min_align > __alignof__ (u34)) 395 min_align = __alignof__ (u34); 396 if (min_size > sizeof (s35)) 397 min_size = sizeof (s35); 398 if (min_align > __alignof__ (s35)) 399 min_align = __alignof__ (s35); 400 if (min_size > sizeof (u35)) 401 min_size = sizeof (u35); 402 if (min_align > __alignof__ (u35)) 403 min_align = __alignof__ (u35); 404 if (min_size > sizeof (s36)) 405 min_size = sizeof (s36); 406 if (min_align > __alignof__ (s36)) 407 min_align = __alignof__ (s36); 408 if (min_size > sizeof (u36)) 409 min_size = sizeof (u36); 410 if (min_align > __alignof__ (u36)) 411 min_align = __alignof__ (u36); 412 if (min_size > sizeof (s37)) 413 min_size = sizeof (s37); 414 if (min_align > __alignof__ (s37)) 415 min_align = __alignof__ (s37); 416 if (min_size > sizeof (u37)) 417 min_size = sizeof (u37); 418 if (min_align > __alignof__ (u37)) 419 min_align = __alignof__ (u37); 420 if (min_size > sizeof (s38)) 421 min_size = sizeof (s38); 422 if (min_align > __alignof__ (s38)) 423 min_align = __alignof__ (s38); 424 if (min_size > sizeof (u38)) 425 min_size = sizeof (u38); 426 if (min_align > __alignof__ (u38)) 427 min_align = __alignof__ (u38); 428 if (min_size > sizeof (s39)) 429 min_size = sizeof (s39); 430 if (min_align > __alignof__ (s39)) 431 min_align = __alignof__ (s39); 432 if (min_size > sizeof (u39)) 433 min_size = sizeof (u39); 434 if (min_align > __alignof__ (u39)) 435 min_align = __alignof__ (u39); 436 if (min_size > sizeof (s40)) 437 min_size = sizeof (s40); 438 if (min_align > __alignof__ (s40)) 439 min_align = __alignof__ (s40); 440 if (min_size > sizeof (u40)) 441 min_size = sizeof (u40); 442 if (min_align > __alignof__ (u40)) 443 min_align = __alignof__ (u40); 444 if (min_size > sizeof (s41)) 445 min_size = sizeof (s41); 446 if (min_align > __alignof__ (s41)) 447 min_align = __alignof__ (s41); 448 if (min_size > sizeof (u41)) 449 min_size = sizeof (u41); 450 if (min_align > __alignof__ (u41)) 451 min_align = __alignof__ (u41); 452 if (min_size > sizeof (s42)) 453 min_size = sizeof (s42); 454 if (min_align > __alignof__ (s42)) 455 min_align = __alignof__ (s42); 456 if (min_size > sizeof (u42)) 457 min_size = sizeof (u42); 458 if (min_align > __alignof__ (u42)) 459 min_align = __alignof__ (u42); 460 if (min_size > sizeof (s43)) 461 min_size = sizeof (s43); 462 if (min_align > __alignof__ (s43)) 463 min_align = __alignof__ (s43); 464 if (min_size > sizeof (u43)) 465 min_size = sizeof (u43); 466 if (min_align > __alignof__ (u43)) 467 min_align = __alignof__ (u43); 468 if (min_size > sizeof (s44)) 469 min_size = sizeof (s44); 470 if (min_align > __alignof__ (s44)) 471 min_align = __alignof__ (s44); 472 if (min_size > sizeof (u44)) 473 min_size = sizeof (u44); 474 if (min_align > __alignof__ (u44)) 475 min_align = __alignof__ (u44); 476 if (min_size > sizeof (s45)) 477 min_size = sizeof (s45); 478 if (min_align > __alignof__ (s45)) 479 min_align = __alignof__ (s45); 480 if (min_size > sizeof (u45)) 481 min_size = sizeof (u45); 482 if (min_align > __alignof__ (u45)) 483 min_align = __alignof__ (u45); 484 if (min_size > sizeof (s46)) 485 min_size = sizeof (s46); 486 if (min_align > __alignof__ (s46)) 487 min_align = __alignof__ (s46); 488 if (min_size > sizeof (u46)) 489 min_size = sizeof (u46); 490 if (min_align > __alignof__ (u46)) 491 min_align = __alignof__ (u46); 492 if (min_size > sizeof (s47)) 493 min_size = sizeof (s47); 494 if (min_align > __alignof__ (s47)) 495 min_align = __alignof__ (s47); 496 if (min_size > sizeof (u47)) 497 min_size = sizeof (u47); 498 if (min_align > __alignof__ (u47)) 499 min_align = __alignof__ (u47); 500 if (min_size > sizeof (s48)) 501 min_size = sizeof (s48); 502 if (min_align > __alignof__ (s48)) 503 min_align = __alignof__ (s48); 504 if (min_size > sizeof (u48)) 505 min_size = sizeof (u48); 506 if (min_align > __alignof__ (u48)) 507 min_align = __alignof__ (u48); 508 if (min_size > sizeof (s49)) 509 min_size = sizeof (s49); 510 if (min_align > __alignof__ (s49)) 511 min_align = __alignof__ (s49); 512 if (min_size > sizeof (u49)) 513 min_size = sizeof (u49); 514 if (min_align > __alignof__ (u49)) 515 min_align = __alignof__ (u49); 516 if (min_size > sizeof (s50)) 517 min_size = sizeof (s50); 518 if (min_align > __alignof__ (s50)) 519 min_align = __alignof__ (s50); 520 if (min_size > sizeof (u50)) 521 min_size = sizeof (u50); 522 if (min_align > __alignof__ (u50)) 523 min_align = __alignof__ (u50); 524 if (min_size > sizeof (s51)) 525 min_size = sizeof (s51); 526 if (min_align > __alignof__ (s51)) 527 min_align = __alignof__ (s51); 528 if (min_size > sizeof (u51)) 529 min_size = sizeof (u51); 530 if (min_align > __alignof__ (u51)) 531 min_align = __alignof__ (u51); 532 if (min_size > sizeof (s52)) 533 min_size = sizeof (s52); 534 if (min_align > __alignof__ (s52)) 535 min_align = __alignof__ (s52); 536 if (min_size > sizeof (u52)) 537 min_size = sizeof (u52); 538 if (min_align > __alignof__ (u52)) 539 min_align = __alignof__ (u52); 540 if (min_size > sizeof (s53)) 541 min_size = sizeof (s53); 542 if (min_align > __alignof__ (s53)) 543 min_align = __alignof__ (s53); 544 if (min_size > sizeof (u53)) 545 min_size = sizeof (u53); 546 if (min_align > __alignof__ (u53)) 547 min_align = __alignof__ (u53); 548 printf ("min struct/union size =%d\n", min_size); 549 printf ("min struct/union align=%d\n", min_align); 550 return 0; 551 } 552