Sujet : Re: __func__ is not a keyword
De : 643-408-1753 (at) *nospam* kylheku.com (Kaz Kylheku)
Groupes : comp.lang.cDate : 17. Mar 2025, 21:31:27
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <20250317131418.597@kylheku.com>
References : 1 2 3 4 5 6 7 8
User-Agent : slrn/pre1.0.4-9 (Linux)
On 2025-03-17, Keith Thompson <Keith.S.Thompson+
u@gmail.com> wrote:
Kaz Kylheku <643-408-1753@kylheku.com> writes:
On 2025-03-16, Keith Thompson <Keith.S.Thompson+u@gmail.com> wrote:
Are you suggesting that a conforming compiler must accept the above
code (defining __func__ in an inner scope)? If so, I disagree.
>
I was initially divided on this one.
>
On the one hand, inside a function, __func__ is not reserved (for future
use); it is described as being bound as a variable name, and that makes
it compatible with lexical shadowing.
>
That's where I disagree, though I'm not 100% certain.
>
Identifiers starting with __ are not conditionally reserved, and
they're not reserved "for future use". They're simply "reserved
for any use".
I completely agree now.
Part of the cocept of an identifier being "reserved" is that the
implementation itself can refer to the identifier, blindly assuming that
the identifier is defined as documented, and has not been shadowed or
tampered with.
OK, that being said, since __func__ is described in a certain way,
namely *as-if* this declaration followed the opening brace
of the function::
static const char __func__[] = "function-name";
I think that legitimizes the program using expressions like:
sizeof __func__
with the expectation that this yields the number of characters
oin the function name, plus one.
That will obviously not work if the implementation takes some
license, and makes the implicit declaration as if it were:
static const char *func = "function-name";
-- TXR Programming Language: http://nongnu.org/txrCygnal: Cygwin Native Application Library: http://kylheku.com/cygnalMastodon: @Kazinator@mstdn.ca