В POSIX intmax_t
обозначается целочисленный тип со знаком, способный представлять любое значение любого целочисленного типа со знаком.
Было бы правильно, что в C99/C11, что intmax_t
всегда имеет тот же размер, что и long long int
?
В POSIX intmax_t
обозначается целочисленный тип со знаком, способный представлять любое значение любого целочисленного типа со знаком.
Было бы правильно, что в C99/C11, что intmax_t
всегда имеет тот же размер, что и long long int
?
Нет. intmax_t
может быть расширенным целым типом, большим, чем long long
. Я не знаю никаких систем, которые были определены как таковые, но вы не должны предполагать в коде приложения, что они одинаковы. (Предполагая, что они одинаковы в коде ОС, может быть приемлемым, если ваша операционная система всегда гарантирует это, но это, вероятно, плохая идея.)
C99 N1256 стандартная черновик
6.2.5 Типы говорят нам о "расширенных типах целочисленных подписей":
4 Существует пять стандартных стандартных целочисленных типов, обозначенных как подписанный char, короткий int, int, long int и long long int. (Эти и другие типы могут быть обозначенный несколькими дополнительными способами, как описано в 6.7.2.) Также может быть реализационные расширенные знаковые целые типы Стандартная и расширенная знаковые целочисленные типы совместно называются целыми типами со знаком. 29)
29) Поэтому любое утверждение в этом стандарте о знаковых целых типах также относится к расширенному значных целых типов.
7.18.1.5 Целочисленные числа наибольшей ширины говорят, что intmax_t
- это максимально возможный "целочисленный тип со знаком", в том числе расширенные:
1 Следующий тип обозначает знаковый целочисленный тип, способный представлять любое значение любой знаковый целочисленный тип:
intmax_t
6.4.4.1. Целочисленные константы затем ясно показывают, что расширенные целые типы могут быть больше любого из стандартных:
6 Если целочисленная константа не может быть представлена каким-либо типом в ее списке, она может иметь расширенный целочисленный тип, если расширенный целочисленный тип может представлять его значение.
Если long
и long long
имеют ту же ширину и представление, что они часто делают, long
можно выбрать для intmax_t
.