fork download
  1. #include <stdio.h>
  2.  
  3. #define IS_SIGNED_TYPE(type) ((type)0 > (type)-1)
  4.  
  5. #define IS_SIGNED_VAR(x) _Generic((x), \
  6.   unsigned char: IS_SIGNED_TYPE(unsigned char), \
  7.   char: IS_SIGNED_TYPE(char), \
  8.   signed char: IS_SIGNED_TYPE(signed char), \
  9.   short: IS_SIGNED_TYPE(short), \
  10.   unsigned short: IS_SIGNED_TYPE(unsigned short), \
  11.   int: IS_SIGNED_TYPE(int), \
  12.   unsigned: IS_SIGNED_TYPE(unsigned), \
  13.   long: IS_SIGNED_TYPE(long), \
  14.   unsigned long: IS_SIGNED_TYPE(unsigned long), \
  15.   long long: IS_SIGNED_TYPE(long long), \
  16.   unsigned long long: IS_SIGNED_TYPE(unsigned long long), \
  17.   float: IS_SIGNED_TYPE(float), \
  18.   double: IS_SIGNED_TYPE(double), \
  19.   long double: IS_SIGNED_TYPE(long double), \
  20.   void*: IS_SIGNED_TYPE(void*), \
  21.   default: 0)
  22.  
  23. int main()
  24. {
  25. unsigned char s;
  26. printf("%d\n", IS_SIGNED_VAR(s));
  27. printf("%d\n", IS_SIGNED_VAR(42));
  28. printf("%d\n", IS_SIGNED_VAR(100u));
  29. }
Success #stdin #stdout 0s 2112KB
stdin
Standard input is empty
stdout
0
1
0