История изменений
Исправление LamerOk, (текущая версия) :
Сами выводимые значения размеров, полученные через sizeof, являются результатом implementation defined behavior.
М-м-м-м-м… Как сейчас будет вкусненько. Я тогда не только берусь доказать, что даже строго соответствующая Стандарту (strictly conforming) программа на Си может выдавать разные результаты в разных средах исполнения.
С таким допущением как твоё, я берусь утверждать, что строго соответствующая стандарту программа вообще не может ничего вывести. Единственный однозначно определённый тип данных в стандарте - это бит. Все остальные типы являются implementation defined
:
5.2.4.2.1 Sizes of integer types <limits.h>
1
The values given below … Their implementation-defined values shall be equal or greater in magnitude
(absolute value) to those shown, with the same sign.
— number of bits for smallest object that is not a bit-field (byte) | — minimum value for an object of type |
---|---|
CHAR_BIT | 8 |
И дальше для всех существующих в си типов. То есть буквально любой, существующий в си «встроенный» тип данных имеет implementation defined
размерность.
В стандартной библиотеке си нет функций вывода единичных битов. Следовательно любой вывод в двоичном виде будет implementation defined
, и программы строго соответсвующие стандарту ничего никуда выводить не должны. Даже return 0;
в main
имеет неизвестную битовую implementation defined
разрядность.
И да, разумеется, всякие printf
’ы сразу вылетают на свалку истории, потому что там ещё кодировки подскакивают кабанчиком.
С заявленным тобою уровнем формализма, ты вообще остался без языка программирования, с чем я тебя сердечно поздравляю!
Исходная версия LamerOk, :
Сами выводимые значения размеров, полученные через sizeof, являются результатом implementation defined behavior.
М-м-м-м-м… Как сейчас будет вкусненько. Я тогда не только берусь доказать, что даже строго соответствующая Стандарту (strictly conforming) программа на Си может выдавать разные результаты в разных средах исполнения.
С таким допущением как твоё, я берусь утверждать, что строго соответствующая стандарту программа вообще не может ничего вывести. Единственный однозначно определённый тип данных в стандарте - это бит. Все остальные типы являются implementation defined
:
5.2.4.2.1 Sizes of integer types <limits.h>
1
The values given below … Their implementation-defined values shall be equal or greater in magnitude
(absolute value) to those shown, with the same sign.
— number of bits for smallest object that is not a bit-field (byte) | — minimum value for an object of type |
---|---|
CHAR_BIT | 8 |
И дальше для всех существующих в си типов. То есть буквально любой, существующий в си «встроенный» тип данных имеет implementation defined
размерность
В стандартной библиотеке си нет функций вывода единичных битов. Следовательно любой вывод в двоичном виде будет implementation defined
, и программы строго соответсвующие стандарту ничего никуда выводить не должны. Даже return 0;
в main
имеет неизвестную битовую implementation defined
разрядность.
И да, разумеется, всякие printf
’ы сразу вылетают на свалку истории, потому что там ещё кодировки подскакивают кабанчиком.
С заявленным тобою уровнем формализма, ты вообще остался без языка программирования, с чем я тебя сердечно поздравляю!