• Re: Loops (was Re: do { quit; } else { })

    From Tim Rentsch@3:633/280.2 to All on Tue Jun 10 23:01:20 2025
    Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:

    Kaz Kylheku <643-408-1753@kylheku.com> writes:
    [...]

    Progarms that manipulate strings using standard library functions
    often take advantage of the above. Strings are defined as
    null-terminated arrays; but it is very common for strings to be
    arrays that are displaced within larger arrays.

    To be pedantic, a string is defined as "a contiguous sequence of
    characters terminated by and including the first null character".
    The word "array" is not used. It does seem fairly obvious that
    the contiguous sequence will be stored in an array (array
    object?), but the standard doesn't quite say so.

    Consider the following program:

    #include <stdio.h>
    #include <string.h>

    typedef unsigned long long ULL;
    ULL hello = ((((0ULL +'o' <<8) +'l' <<8) +'l' <<8) +'e' <<8) + 'h';

    int
    main(){
    printf( "length is %zu\n", strlen( (char*)&hello ) );
    return 0;
    }

    On a little endian machine (with CHAR_BIT == 8) this program works,
    and TTBOMK conforms to both the letter and the spirit of the C
    standard, without any undefined behavior (on that platform). Yet
    there are no arrays in sight, and certainly no array objects.

    --- MBSE BBS v1.1.1 (Linux-x86_64)
    * Origin: A noiseless patient Spider (3:633/280.2@fidonet)
  • From Bonita Montero@3:633/280.2 to All on Sat Jun 14 20:24:30 2025
    Am 10.06.2025 um 15:01 schrieb Tim Rentsch:

    Consider the following program:

    #include <stdio.h>
    #include <string.h>

    typedef unsigned long long ULL;
    ULL hello = ((((0ULL +'o' <<8) +'l' <<8) +'l' <<8) +'e' <<8) + 'h';

    int
    main(){
    printf( "length is %zu\n", strlen( (char*)&hello ) );
    return 0;
    }

    On a little endian machine (with CHAR_BIT == 8) this program works,
    and TTBOMK conforms to both the letter and the spirit of the C
    standard, without any undefined behavior (on that platform). Yet
    there are no arrays in sight, and certainly no array objects.

    There are not much remaining big-endian architectures today.
    Little-endian is simply the cleverer idea.


    --- MBSE BBS v1.1.1 (Linux-x86_64)
    * Origin: A noiseless patient Spider (3:633/280.2@fidonet)
  • From Scott Lurndal@3:633/280.2 to All on Sat Jun 14 23:57:56 2025
    Reply-To: slp53@pacbell.net

    Bonita Montero <Bonita.Montero@gmail.com> writes:
    Am 10.06.2025 um 15:01 schrieb Tim Rentsch:

    Consider the following program:

    #include <stdio.h>
    #include <string.h>

    typedef unsigned long long ULL;
    ULL hello = ((((0ULL +'o' <<8) +'l' <<8) +'l' <<8) +'e' <<8) + 'h';

    int
    main(){
    printf( "length is %zu\n", strlen( (char*)&hello ) );
    return 0;
    }

    On a little endian machine (with CHAR_BIT == 8) this program works,
    and TTBOMK conforms to both the letter and the spirit of the C
    standard, without any undefined behavior (on that platform). Yet
    there are no arrays in sight, and certainly no array objects.

    There are not much remaining big-endian architectures today.

    Ethernet is big-endian at the byte level and little-endian
    at the bit level.


    --- MBSE BBS v1.1.1 (Linux-x86_64)
    * Origin: UsenetServer - www.usenetserver.com (3:633/280.2@fidonet)
  • From Michael S@3:633/280.2 to All on Sun Jun 15 05:27:20 2025
    On Sat, 14 Jun 2025 13:57:56 GMT
    scott@slp53.sl.home (Scott Lurndal) wrote:

    Bonita Montero <Bonita.Montero@gmail.com> writes:
    Am 10.06.2025 um 15:01 schrieb Tim Rentsch:

    Consider the following program:

    #include <stdio.h>
    #include <string.h>

    typedef unsigned long long ULL;
    ULL hello = ((((0ULL +'o' <<8) +'l' <<8) +'l' <<8) +'e' <<8) +
    'h';

    int
    main(){
    printf( "length is %zu\n", strlen( (char*)&hello ) );
    return 0;
    }

    On a little endian machine (with CHAR_BIT == 8) this program works,
    and TTBOMK conforms to both the letter and the spirit of the C
    standard, without any undefined behavior (on that platform). Yet
    there are no arrays in sight, and certainly no array objects.

    There are not much remaining big-endian architectures today.

    Ethernet is big-endian at the byte level and little-endian
    at the bit level.


    802.3 frames are big-endian, because of Length field.
    Several orders of magnitude more popular Ethernet II frames are
    endian-neutral.


    --- MBSE BBS v1.1.1 (Linux-x86_64)
    * Origin: A noiseless patient Spider (3:633/280.2@fidonet)
  • From Bonita Montero@3:633/280.2 to All on Sun Jun 15 17:32:39 2025
    Am 14.06.2025 um 15:57 schrieb Scott Lurndal:
    Bonita Montero <Bonita.Montero@gmail.com> writes:
    Am 10.06.2025 um 15:01 schrieb Tim Rentsch:

    Consider the following program:

    #include <stdio.h>
    #include <string.h>

    typedef unsigned long long ULL;
    ULL hello = ((((0ULL +'o' <<8) +'l' <<8) +'l' <<8) +'e' <<8) + 'h'; >>>
    int
    main(){
    printf( "length is %zu\n", strlen( (char*)&hello ) );
    return 0;
    }

    On a little endian machine (with CHAR_BIT == 8) this program works,
    and TTBOMK conforms to both the letter and the spirit of the C
    standard, without any undefined behavior (on that platform). Yet
    there are no arrays in sight, and certainly no array objects.

    There are not much remaining big-endian architectures today.

    Ethernet is big-endian at the byte level and little-endian
    at the bit level.

    However, little-endian is simply the smarter concept.

    --- MBSE BBS v1.1.1 (Linux-x86_64)
    * Origin: A noiseless patient Spider (3:633/280.2@fidonet)