На самом деле, сегодня я просто удивлялся тому же Кажется, работает следующее:
#define is_signed(t) ( ((t)-1) < 0 )
Я проверял с:
#include <stdio.h>
#define is_signed(t) ( ((t)-1) < 0 )
#define psigned(t) printf( #t " is %s\n", is_signed(t) ? "signed" : "unsigned" );
int
main(void)
{
psigned( int );
psigned( unsigned int );
}
который печатает:
int is signed
unsigned int is unsigned