Я изучаю "Expert C Programming" Питера Ван Дер Линдена. В главе A.6 автор описал, как определить, является ли переменная без знака или нет в K & R C. Макрос находится ниже:
#define ISUNSIGNED(a) (a>=0 && ~a>=0)
Книга очень старая, она была впервые опубликована в 1994 году! И я еще не изучил K & R C. Вопрос заключается в том, как определить, является ли переменная без знака или нет в ANSI C.
Я попытался решить эту проблему. Так как "0" является int в ANSI C, а любое другое число, кроме float, double и long double, будет преобразовано в int или unsigned int с помощью Integer Upgrade при сравнении с 0. Поэтому я хочу найти ребро между неподписанным и подписанным числом. Когда я сравниваю (тип края) 0 с a, тип a не будет изменен. Макрос также приведен ниже:
#define ISUNSIGNED(a) (a>=(the edge type)0 && ~a>=(the edge type)0)
Я не могу найти тип края, есть ли кто-нибудь, кто может помочь мне решить проблему? Я изменил "число" на "переменную" для более точного выражения.