| Deutsch English Français Italiano |
|
<vicc5d$12kql$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!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: question about linker
Date: Fri, 29 Nov 2024 09:30:37 -0300
Organization: A noiseless patient Spider
Lines: 94
Message-ID: <vicc5d$12kql$1@dont-email.me>
References: <vi54e9$3ie0o$1@dont-email.me> <vi6sb1$148h7$1@paganini.bofh.team>
<vi6uaj$3ve13$2@dont-email.me> <87plmfu2ub.fsf@nosuchdomain.example.com>
<vi9jk4$gse4$1@dont-email.me> <87bjxzt7xq.fsf@nosuchdomain.example.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Fri, 29 Nov 2024 13:30:38 +0100 (CET)
Injection-Info: dont-email.me; posting-host="d4f23f3e22a158530d6134251c073abe";
logging-data="1135445"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+Yb8CmNE58b+vDTVWdJIlJRr8f6nzSu3I="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:MIG3i4ck2ZMPtKDMPbthagl0L0Y=
Content-Language: en-GB
In-Reply-To: <87bjxzt7xq.fsf@nosuchdomain.example.com>
Bytes: 3893
Em 11/28/2024 5:33 PM, Keith Thompson escreveu:
> If an object is const because of its definition, then that object is
> itself read-only, and anything that bypasses that (pointer casts, etc.)
> causes undefined behavior.
Yes. This is my point. When the object itself cannot change, I used the
name immutable. And "ready only" when we don´t know if the object is
immutable or not - like pointer to const object.
In any, case it is just a matter of definition. I think it is clear for
both of us. (I am not claiming these definitions are part of C standard)
>> For compile that computation what matters is the guarantee that the
>> compiler knows the values (it knows because it always the same value
>> of initialization) when using the object. (It does not depend on flow
>> analysis)
> There's no requirement for the compiler to "know" the value of a const
> object.
When the expression is required to be constant expression like in switch
case, then the compiler must know the value.
Sorry if I am begin repetitive, but here is my motivation to say that
const was already ready for that, no need to new keyword constexpr.
Consider this sample
void f(const int a)
{
const int b = 1;
switch (a){
case a: break; // OPS
case b: break; // should be OK
}
}
The compiler does not know the value of 'a' even it is declared as
constant object; on the other hand the compiler knows the value of 'b';
So, here is my point - In init-declarators. const and constexpr becomes
similar.
Em 11/28/2024 5:33 PM, Keith Thompson escreveu:
>> Sample why no-storage is useful
>>
>> void F()
>> {
>> register const int i = 1;
>> //lets way we have lanbdas in C
>> f( []()
>> {
>> //safe to use i even in another thread, or even after
exiting F
>> int k = i;
>> }
>> );
>> }
> Without "register", since i is const, its value will never change
> (barring undefined behavior), so it should be safe to use anyway.
> How is eliminating the storage for i useful? You can just ignore
> it, and the compiler may be able to optimize it away.
If lambdas were implemented in C, a decision has to be made about
capture. Is it allowed or not?
Objects with no storage could be allowed to be captured because this
will never imply in lifetime problems; for instance if the lambdas is
called by another thread.
C23 also added constexpr in compound literal.
(constexpr struct X ){ }
I also don´t understand why not just use const for that.
I also allow static.
(static const struct X ){ }
I think in this case it makes sense.