Проверка во время компиляции того, что переменная подписана/без знакаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проверка во время компиляции того, что переменная подписана/без знака

Сообщение Anonymous »

Я пытаюсь придумать способы проверки во время компиляции, является ли определенная переменная знаковой или беззнаковой. На самом деле, я довольно долго использовал следующий макрос для проверки знаковой переменной:

Код: Выделить всё

#ifdef _DEBUG
#define CHECK_SIGNED(v) if((v) == -(v)){}
#else
#define CHECK_SIGNED(v)
#endif
и тогда его пройдёт следующее:

Код: Выделить всё

INT rr = 0;
CHECK_SIGNED(rr);
при этом:

Код: Выделить всё

UINT rr = 0;
CHECK_SIGNED(rr);
сгенерирует ошибку времени компиляции:


ошибка C4146: унарный минус оператор применен к беззнаковому типу, результат
все еще без знака


Поэтому теперь я пытаюсь придумать аналогичную проверку для беззнакового типа переменная. Есть предложения?

PS. Хотя я использую VS 2017, было бы неплохо сделать его обратно совместимым со старыми стандартами C++.

Подробнее здесь: https://stackoverflow.com/questions/575 ... d-unsigned
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»