fork download
  1. #include <stdio.h>
  2.  
  3. #define STATIC_ASSERT(COND) typedef char static_assertion_##__LINE__[(COND) ? 1 : -1]
  4. #define ENSURE_SIZE(structure, size) STATIC_ASSERT(sizeof(structure) == size)
  5.  
  6. typedef struct
  7. {
  8. unsigned b0 : 1;
  9. unsigned b1 : 1;
  10. unsigned b2 : 1;
  11. unsigned b3 : 1;
  12. unsigned b4 : 1;
  13. unsigned b5 : 1;
  14. unsigned b6 : 1;
  15. unsigned b7 : 1;
  16. unsigned b8 : 1;
  17. unsigned b9 : 1;
  18. unsigned b10 : 1;
  19. unsigned b11 : 1;
  20. unsigned b12 : 1;
  21. unsigned b13 : 1;
  22. unsigned b14 : 1;
  23. unsigned b15 : 1;
  24. unsigned b16 : 1;
  25. unsigned b17 : 1;
  26. unsigned b18 : 1;
  27. unsigned b19 : 1;
  28. unsigned b20 : 1;
  29. unsigned b21 : 1;
  30. unsigned b22 : 1;
  31. unsigned b23 : 1;
  32. unsigned b24 : 1;
  33. unsigned b25 : 1;
  34. unsigned b26 : 1;
  35. unsigned b27 : 1;
  36. unsigned b28 : 1;
  37. unsigned b29 : 1;
  38. unsigned b30 : 1;
  39. unsigned b31 : 1;
  40. unsigned b32 : 1;
  41. } foo;
  42. ENSURE_SIZE(foo, sizeof(unsigned));
  43.  
  44. int main(void) {
  45. return 0;
  46. }
  47.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.c:3:42: error: size of array 'static_assertion___LINE__' is negative
 #define STATIC_ASSERT(COND) typedef char static_assertion_##__LINE__[(COND) ? 1 : -1]
                                          ^
prog.c:4:38: note: in expansion of macro 'STATIC_ASSERT'
 #define ENSURE_SIZE(structure, size) STATIC_ASSERT(sizeof(structure) == size)
                                      ^
prog.c:42:1: note: in expansion of macro 'ENSURE_SIZE'
 ENSURE_SIZE(foo, sizeof(unsigned));
 ^
stdout
Standard output is empty