LINUX.ORG.RU

История изменений

Исправление 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_BIT8

И дальше для всех существующих в си типов. То есть буквально любой, существующий в си «встроенный» тип данных имеет 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_BIT8

И дальше для всех существующих в си типов. То есть буквально любой, существующий в си «встроенный» тип данных имеет implementation defined размерность

В стандартной библиотеке си нет функций вывода единичных битов. Следовательно любой вывод в двоичном виде будет implementation defined, и программы строго соответсвующие стандарту ничего никуда выводить не должны. Даже return 0; в main имеет неизвестную битовую implementation defined разрядность.

И да, разумеется, всякие printf’ы сразу вылетают на свалку истории, потому что там ещё кодировки подскакивают кабанчиком.

С заявленным тобою уровнем формализма, ты вообще остался без языка программирования, с чем я тебя сердечно поздравляю!