Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connections
Warning: mysqli::query(): Couldn't fetch mysqli in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\index.php on line 66
Article <v9aasg$2mfsi$1@dont-email.me>
Deutsch   English   Français   Italiano  
<v9aasg$2mfsi$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!2.eu.feeder.erje.net!3.eu.feeder.erje.net!feeder.erje.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Bart <bc@freeuk.com>
Newsgroups: comp.lang.c
Subject: Re: how cast works?
Date: Sun, 11 Aug 2024 13:30:08 +0100
Organization: A noiseless patient Spider
Lines: 84
Message-ID: <v9aasg$2mfsi$1@dont-email.me>
References: <v8vlo9$2oc1v$1@dont-email.me> <slrnvb7kis.28a.dan@djph.net>
 <v929ah$3u7l7$1@dont-email.me> <87ttfu94yv.fsf@nosuchdomain.example.com>
 <v93a3t$6q7v$1@dont-email.me> <v93e2q$8put$1@dont-email.me>
 <v94smd$mgp8$1@dont-email.me> <v95j4r$qh1q$3@dont-email.me>
 <v95okr$2oa92$1@dont-email.me> <v95sij$1arjo$3@dont-email.me>
 <v97eo3$i03p$2@dont-email.me> <v97p5g$lfau$1@dont-email.me>
 <v983ks$nglf$1@dont-email.me> <v98rgh$untn$1@dont-email.me>
 <87zfpj537h.fsf@nosuchdomain.example.com> <v9aafn$298lv$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Sun, 11 Aug 2024 14:30:09 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="ccc4d7b3849d6bb7af84f0260985f761";
	logging-data="2834322"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/pzjDW3huQ1nq3kgHbq1dk"
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:hGl4kfH0kpSeglqkaVHu0p74w74=
In-Reply-To: <v9aafn$298lv$1@dont-email.me>
Content-Language: en-GB
Bytes: 3875

On 11/08/2024 13:23, Thiago Adams wrote:
> Em 8/10/2024 9:10 PM, Keith Thompson escreveu:
>> Thiago Adams <thiago.adams@gmail.com> writes:
>>> Em 8/10/2024 1:14 PM, Bart escreveu:
>>>>>
>>>>> Bart, Does your compiler support the `bool` type, where the value
>>>>> is always either 1 or 0?
>>>> There is a bool type, but it is treated like unsigned char, so is
>>>> non-conforming.
>>>
>>> I do the same in my compiler , when I transpile from C99 to C89.
>>> I was thinking how to make it conforming.
>>> For instance on each write.
>>>
>>> bool b = 123; -> unsigned char b = !!(123);
>>>
>>> The problem this does not fix unions, writing on int and reading from 
>>> char.
>>
>> I don't think you need to fix that.
> 
> [....]
> 
>> Summary:
>>
>> Conversion from any scalar type to _Bool is well defined, and must yield
>> 0 or 1.
> 
> 
> I will fix in terns of expressions types.
> 
>   - In this case cast to bool
>   - Assignment to bool
> 
>> It's possible to force a representation other than 0 or 1 into a _Bool
>> object, bypassing any value conversion.
>>
>> Conversion from _Bool to any scalar type is well defined if the
>> operand is a _Bool object holding a representation of 0 or 1.
>>
>> Conversion from _Bool to any scalar type for an object holding some
>> representation other than 0 or 1 either yields 0 or 1 (depending
>> on the low-order bit) or has undefined behavior.
> 
> I did a sample now..
> 
> #include <stdio.h>
> 
> int main() {
>      union {
>          int i;
>          _Bool b;
>      } data;
>      data.i = 123;
>      printf("%d", data.b);
> }
> 
> it printed 123 not 1.
> So I think the assignment and cast covers all/most cases.
> (From some previous tests I thought this was printing 1)

That's little different from this example:

  #include <stdio.h>

  int main() {
      union {
          int i;
          float b;
      } data;
      data.i = 123;
      printf("%e", data.b);
  }

I get some arbitrary float value printed. You're supposed to know what 
you are doing with unions.

It's not something I'd worry about. If you're trying to make a safer C, 
then you'd have to ban unions, or ban bools inside unions that could be 
read out as a different type, or introduce tagged unions so that runtime 
checking can be done.