Deutsch   English   Français   Italiano  
<v9aafn$298lv$1@dont-email.me>

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

Path: ...!3.eu.feeder.erje.net!feeder.erje.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Thiago Adams <thiago.adams@gmail.com>
Newsgroups: comp.lang.c
Subject: Re: how cast works?
Date: Sun, 11 Aug 2024 09:23:19 -0300
Organization: A noiseless patient Spider
Lines: 67
Message-ID: <v9aafn$298lv$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>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Sun, 11 Aug 2024 14:23:20 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="5178e0c40238d6cd6e3cb7269b7f3c31";
	logging-data="2400959"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/zdiko4C8xuLLHGnXDNy5XOeDY4/RrxSI="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:3BDdSEMu0ArkyqolB3AjnlZ6RWc=
Content-Language: en-GB
In-Reply-To: <87zfpj537h.fsf@nosuchdomain.example.com>
Bytes: 3360

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)

The motivation for C89 in cake was not to support old compilers, but 
generate code that is compatible with C++98. In this aspect bool was 
already there in C++98.(This just gave me idea to add target c++98)