| Deutsch English Français Italiano |
|
<v4g02k$2gfm9$2@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Malcolm McLean <malcolm.arthur.mclean@gmail.com>
Newsgroups: comp.lang.c
Subject: Re: "undefined behavior"?
Date: Fri, 14 Jun 2024 00:41:08 +0100
Organization: A noiseless patient Spider
Lines: 44
Message-ID: <v4g02k$2gfm9$2@dont-email.me>
References: <666a095a$0$952$882e4bbb@reader.netnews.com>
<8t3k6j5ikf5mvimvksv2t91gbt11ljdfgb@4ax.com>
<666a18de$0$958$882e4bbb@reader.netnews.com>
<87y1796bfn.fsf@nosuchdomain.example.com>
<666a2a30$0$952$882e4bbb@reader.netnews.com>
<87tthx65qu.fsf@nosuchdomain.example.com> <v4dtlt$23m6i$1@dont-email.me>
<87plsk5xbz.fsf@nosuchdomain.example.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Fri, 14 Jun 2024 01:41:08 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="35df34e3574a73517d6a229abcda4a8f";
logging-data="2637513"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+gPxdKkaT8T3svkKVrrnWL3xzYxYOTHcI="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:RbwYYf0EWRuFLpNI7VeYHNaENRE=
In-Reply-To: <87plsk5xbz.fsf@nosuchdomain.example.com>
Content-Language: en-GB
Bytes: 3312
On 13/06/2024 22:47, Keith Thompson wrote:
> Malcolm McLean <malcolm.arthur.mclean@gmail.com> writes:
>> On 13/06/2024 01:33, Keith Thompson wrote:
>>> printf is a variadic function, so the types of the arguments after
>>> the format string are not specified in its declaration. The printf
>>> function has to *assume* that arguments have the types specified
>>> by the format string. This:
>>> printf("%d\n", foo);
>>> (probably) has undefined behavior if foo is of type size_t.
>>>
>> And isn't that a nightmare?
>
> Not at all. Compilers commonly diagnose mismatches when the format
> string is a string literal, as it most commonly is. The format
> specifier for size_t is "%zu", since C99.
>
>>> There is no implicit conversion to the expected type. Note that
>>> the format string doesn't have to be a string literal, so it's
>>> not always even possible for the compiler to check the types.
>>> Variadic functions give you a lot of flexibility at the cost of
>>> making some type errors difficult to detect.
>>> (I wrote "probably" because size_t *might* be a typedef for unsigned
>>> int, and there are special rules about arguments of corresponding
>>> signed and unsigned types.)
>>
>> We just can't have size_t variables swilling around in prgrams for
>> these reasons.
>
> We can and do.
>
And this is how things break.
Now, running a third party editor under your control so that user can
edit an text and return control and the edited text back to you when he
exits the editor. Yes, I understand that this is a difficult thing to
do, the software engineeering isn't consistent, and theway you have to
do it may change from one version of C to another.
But printing out a variable which holds the length of a string? And
something so basic breaks from one version of C to the next? We should
ahave no tolerance for that at all.
--
Check out my hobby project.
http://malcolmmclean.github.io/babyxrc