Deutsch   English   Français   Italiano  
<87bju0x10g.fsf@nosuchdomain.example.com>

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

Path: ...!weretis.net!feeder9.news.weretis.net!news.quux.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: Keith Thompson <Keith.S.Thompson+u@gmail.com>
Newsgroups: comp.lang.c
Subject: Re: __func__ is not a keyword
Date: Sun, 16 Mar 2025 11:51:11 -0700
Organization: None to speak of
Lines: 47
Message-ID: <87bju0x10g.fsf@nosuchdomain.example.com>
References: <vr4lgu$63fu$1@dont-email.me>
	<87bju2htxy.fsf@nosuchdomain.example.com>
	<6sCBP.1140938$t84d.713135@fx11.iad>
MIME-Version: 1.0
Content-Type: text/plain
Injection-Date: Sun, 16 Mar 2025 19:51:15 +0100 (CET)
Injection-Info: dont-email.me; posting-host="780a281062e134e978cc3552b9df7fb5";
	logging-data="2462235"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX18Eevuy2TpibkVtz0xQHlj/"
User-Agent: Gnus/5.13 (Gnus v5.13)
Cancel-Lock: sha1:yQHlULsVB2ygfvb6F8VO8e/OeFU=
	sha1:9COzNnUoa2lmtZMILJVTGOrws6Y=
Bytes: 2741

scott@slp53.sl.home (Scott Lurndal) writes:
> Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:
>>Thiago Adams <thiago.adams@gmail.com> writes:
>>> This program does not compile..in gcc and clang
>>>
>>> int __func__  i =1;
>>
>>I'm mildly curious how gcc and clang treat "__func__" internally
>>that leads to this odd behavior. 
>
> From the gcc info page:
>
>    GCC provides three magic variables that hold the name of the current
>    function, as a string.  The first of these is '__func__', which is part
>    of the C99 standard:
>
>     The identifier '__func__' is implicitly declared by the translator as
>    if, immediately following the opening brace of each function definition,
>    the declaration
>
>      static const char __func__[] = "function-name";
>
>    appeared, where function-name is the name of the lexically-enclosing
>    function.  This name is the unadorned name of the function.

But that doesn't tell us how it's treated internally and it's
inconsistent with gcc's actual behavior.  Both a look at gcc's
source code and its behavior indicate that gcc treats __func__ as
a keyword, which is inconsistent with the info page.  For example,
one would expect this:

int main(void) {
    {
        int __func__;
    }
}

to be accepted, with the inner definition of __func__ hiding the
implicit static declaration, but gcc reports a syntax error.

It's not a conformance issue, since __func__ is a reserved identifier
and any code that can tell whether it's a keyword has undefined
behavior.

-- 
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
void Void(void) { Void(); } /* The recursive call of the void */