On 2021-08-25 3:40 p.m., Van Snyder via cctalk wrote:
On Wed, 2021-08-25 at 14:08 -0700, Fred Cisin via cctalk wrote:
That is not how C defines bytes or ints, fyi.

On Wed, 25 Aug 2021, ben via cctalk wrote:
I suspect the standard says a byte is at least 7 bits.
Thus 8 bit data is NOT PORTABLE.

I don't know from "the standard", but, K&R said that
an "int" could be whatever size was most convenient for the
processor,
BUT, that an "int" could not be shorter than a "short", nor longer
than a
"long"

The C 2011 standard (ISO/IEC 9980-2011) subclause 6.2.5 paragraphs 4-9
say

    There are five standard signed integer types, designated as signed
    char, short int, int, long int, and long long int. (These and other
    types may be designated in several additional ways, as described in
    6.7.2.) There may also be implementation-defined extended signed
    integer types.38) The standard and extended signed integer types are
    collectively called signed integer types.
An object declared as type signed char occupies the same amount of
    storage as‘‘plain’’ char object. A ‘‘plain’’ int object has the natural
    size suggested by the architecture of the execution environment (large
    enough to contain any value in the range INT_MIN to INT_MAX as defined
    in the header <limits.h>).

    For each of the signed integer types, there is a corresponding (but
    different) unsigned integer type (designated with the keyword unsigned)
    that uses the same amount of storage (including sign information) and
    has the same alignment requirements. The type _Bool and the unsigned
    integer types that correspond to the standard signed integer types are
    the standard unsigned integer types. The unsigned integer types that
    correspond to the extended signed integer types are the extended
    unsigned integer types. The standard and extended unsigned integer
    types are collectively called unsigned integer types.
The standard signed integer types and standard unsigned integer types
    are collectively called the standard integer types; the extended signed
    integer types and extended unsigned integer types are collectively
    called the extended integer types.

    For any two integer types with the same signedness and different
    integer conversion rank (see 6.3.1.1), the range of values of the type
    with smaller integer conversion rank issubrange of the values of the
    other type.

    The range of nonnegative values of a signed integer type is a subrange
    of the corresponding unsigned integer type, and the representation of
    the same value in each type is the same.41) A computation involving
    unsigned operands can never overflow, because a result that cannot be
    represented by the resulting unsigned integer type is reduced modulo
    the number that is one greater than the largest value that can be
    represented by the resulting type.

41) The same representation and alignment requirements are meant to
imply interchangeability as arguments to functions, return values from
functions, and members of unions.

What did C for the PDP 10 do?


Reply via email to