#include <stdio.h>
#define IS_SIGNED_TYPE(type) ((type)0 > (type)-1)
#define IS_SIGNED_VAR(x) _Generic((x), \
unsigned char: IS_SIGNED_TYPE(unsigned char), \
char: IS_SIGNED_TYPE(char), \
signed char: IS_SIGNED_TYPE(signed char), \
short: IS_SIGNED_TYPE(short), \
unsigned short: IS_SIGNED_TYPE(unsigned short), \
int: IS_SIGNED_TYPE(int), \
unsigned: IS_SIGNED_TYPE(unsigned), \
long: IS_SIGNED_TYPE(long), \
unsigned long: IS_SIGNED_TYPE(unsigned long), \
long long: IS_SIGNED_TYPE(long long), \
unsigned long long: IS_SIGNED_TYPE(unsigned long long), \
float: IS_SIGNED_TYPE(float), \
double: IS_SIGNED_TYPE(double), \
long double: IS_SIGNED_TYPE(long double), \
void*: IS_SIGNED_TYPE(void*), \
default: 0)
int main()
{
unsigned char s;
printf("%d\n", IS_SIGNED_VAR
(s
)); printf("%d\n", IS_SIGNED_VAR
(42)); printf("%d\n", IS_SIGNED_VAR
(100u
)); }
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIElTX1NJR05FRF9UWVBFKHR5cGUpICgodHlwZSkwID4gKHR5cGUpLTEpCgojZGVmaW5lIElTX1NJR05FRF9WQVIoeCkgX0dlbmVyaWMoKHgpLCBcCiAgICAgICAgdW5zaWduZWQgY2hhcjogICAgICBJU19TSUdORURfVFlQRSh1bnNpZ25lZCBjaGFyKSwgXAogICAgICAgIGNoYXI6ICAgICAgICAgICAgICAgSVNfU0lHTkVEX1RZUEUoY2hhciksIFwKICAgICAgICBzaWduZWQgY2hhcjogICAgICAgIElTX1NJR05FRF9UWVBFKHNpZ25lZCBjaGFyKSwgXAogICAgICAgIHNob3J0OiAgICAgICAgICAgICAgSVNfU0lHTkVEX1RZUEUoc2hvcnQpLCBcCiAgICAgICAgdW5zaWduZWQgc2hvcnQ6ICAgICBJU19TSUdORURfVFlQRSh1bnNpZ25lZCBzaG9ydCksIFwKICAgICAgICBpbnQ6ICAgICAgICAgICAgICAgIElTX1NJR05FRF9UWVBFKGludCksIFwKICAgICAgICB1bnNpZ25lZDogICAgICAgICAgIElTX1NJR05FRF9UWVBFKHVuc2lnbmVkKSwgXAogICAgICAgIGxvbmc6ICAgICAgICAgICAgICAgSVNfU0lHTkVEX1RZUEUobG9uZyksIFwKICAgICAgICB1bnNpZ25lZCBsb25nOiAgICAgIElTX1NJR05FRF9UWVBFKHVuc2lnbmVkIGxvbmcpLCBcCiAgICAgICAgbG9uZyBsb25nOiAgICAgICAgICBJU19TSUdORURfVFlQRShsb25nIGxvbmcpLCBcCiAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nOiBJU19TSUdORURfVFlQRSh1bnNpZ25lZCBsb25nIGxvbmcpLCBcCiAgICAgICAgZmxvYXQ6ICAgICAgICAgICAgICBJU19TSUdORURfVFlQRShmbG9hdCksIFwKICAgICAgICBkb3VibGU6ICAgICAgICAgICAgIElTX1NJR05FRF9UWVBFKGRvdWJsZSksIFwKICAgICAgICBsb25nIGRvdWJsZTogICAgICAgIElTX1NJR05FRF9UWVBFKGxvbmcgZG91YmxlKSwgXAogICAgICAgIHZvaWQqOiAgICAgICAgICAgICAgSVNfU0lHTkVEX1RZUEUodm9pZCopLCBcCiAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAwKSAKCmludCBtYWluKCkKewogICAgdW5zaWduZWQgY2hhciBzOwogICAgcHJpbnRmKCIlZFxuIiwgSVNfU0lHTkVEX1ZBUihzKSk7CiAgICBwcmludGYoIiVkXG4iLCBJU19TSUdORURfVkFSKDQyKSk7CiAgICBwcmludGYoIiVkXG4iLCBJU19TSUdORURfVkFSKDEwMHUpKTsgCn0=