Как проверить на языке C, содержит ли переменная int допустимое значение (не представление прерываний)? - PullRequest
1 голос
/ 07 января 2020

Контекст:

Это продолжение моего другого моего вопроса . Я спросил и о C, и о C ++, и вскоре получил ответ о C ++, потому что последний черновик для C ++ 20 явно требует, чтобы целочисленные типы со знаком использовали использование дополнения до двух, а биты заполнения (если они есть) не могли давать представления ловушек. К сожалению, это не так для C.

Конечно, я знаю, что в большинстве современных систем используются только 2-дополненные представления целых чисел и никаких битов заполнения, а это означает, что представление ловушек не наблюдается. Тем не менее, стандарт C, по-видимому, все еще допускает 3 представления типов со знаком: знак и величина, одно дополнение и дополнение двух. И, по крайней мере, черновик C18 (n2310 6.2.6. Представления типов явно позволяют заполнять биты для целочисленных типов, отличных от char. Это все еще верно для последней версии ( n2454 ), которую я мог бы найти

Вопрос

Таким образом, в контексте возможных битов заполнения или представления со знаком, не являющегося дополнением к двум, переменные int могут содержать значения прерываний для соответствующих реализаций. Есть ли надежный способ убедиться, что переменная int содержит допустимое значение?

...