Deutsch   English   Français   Italiano  
<vr4rh9$b38v$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!eternal-september.org!.POSTED!not-for-mail
From: Thiago Adams <thiago.adams@gmail.com>
Newsgroups: comp.lang.c
Subject: Re: __func__ is not a keyword
Date: Sat, 15 Mar 2025 18:30:17 -0300
Organization: A noiseless patient Spider
Lines: 68
Message-ID: <vr4rh9$b38v$1@dont-email.me>
References: <vr4lgu$63fu$1@dont-email.me>
 <87bju2htxy.fsf@nosuchdomain.example.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Sat, 15 Mar 2025 22:30:17 +0100 (CET)
Injection-Info: dont-email.me; posting-host="7c3e0c65bee7f4dbeea0c670cee9b5e9";
	logging-data="363807"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+nWw4Hj8eoaraofUEvQfAKlxWuBzRoouM="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:dkeH76zNIlTOvdcH9w7uxUcpR7c=
In-Reply-To: <87bju2htxy.fsf@nosuchdomain.example.com>
Content-Language: en-GB
Bytes: 3273

Em 3/15/2025 6:20 PM, Keith Thompson escreveu:
> Thiago Adams <thiago.adams@gmail.com> writes:
>> This program does not compile..in gcc and clang
>>
>> int __func__  i =1;
>>
>> int main () {}
>>
>> error: expected identifier...
> 
> The "i" makes that a syntax error anyway, even if "__func__" were
> accepted as an ordinary identifier.  Still, you have found something
> odd.
> 

Yes sorry...

>> Standard has..
>>
>> "The identifier __func__ shall be implicitly declared by the
>> translator as if, immediately following
>> the opening brace of each function definition, the declaration" ...
>>
>>
>> My understand is that __func__   is not a keyword and that is
>> something defined inside the functions.. so I don’t know why gcc and
>> clang complains in the file scope.
> 
> If I change your program to:
> 
>      int __func__ = 1;
>      int main(void) {}
> 


yes..now I don't known if I did it right at first time.
but the problem I was talking about still there. :)

> both gcc and clang complain "error: expected identifier or ‘(’".
> If I change it from __func__ to __foo__, neither gcc nor clang
> complains.
> 
>      All identifiers that begin with a double underscore (__) or begin
>      with an underscore (_) followed by an uppercase letter are reserved
>      for any use, except those identifiers which are lexically identical
>      to keywords.
>      ...
>      If the program declares or defines an identifier in a context in
>      which it is reserved (other than as allowed by 7.1.4), the behavior
>      is undefined.
> 
> So the program has undefined behavior, which means that terminating
> the translation with the issuance of a diagnostic message is
> permitted.
> 
> I'm mildly curious how gcc and clang treat "__func__" internally
> that leads to this odd behavior.  The obvious way to implement it
> would be to internally create a declaration of __func__ on entry
> to each function definition, which shouldn't cause the symptom
> you're seeing.  But it's not a conformance issue
> 

I think __func__ is begin used as keyword inside gcc /clang.

Thanks for clarifying it.
I think this UB could be removed.