Re: Use of feature test macros

Valery Ushakov <[email protected]>
Newsgroups gmane.os.netbsd.devel.userlevel
Message-ID <[email protected]>
On Sun, Nov 03, 2024 at 02:02:59 +0100, Roland Illig wrote:

> Am 03.11.2024 um 00:52 schrieb Robert Elz:
> >     Date:        Sat, 2 Nov 2024 22:36:10 +0100
> >     From:        Roland Illig <[email protected]>
> >
> >   | Is the "- 0" in the first expression really necessary? If so, for which
> >   | cases?
> >
> > When _POSIX_C_SOURCE is undefined (or defined to nothing).
> > That is the standard idiom for testing all of these feature macros.
> 
> When _POSIX_C_SOURCE (or any other identifier) is undefined, the
> preprocessor replaces it with 0. This has been spelled out in the C
> standards since C90, for example in C23 6.10.2p13, and I thought it
> would be common knowledge, that's why I didn't mention it in my original
> questions.

The idiom (though I learned it as FOO + 0, not minus) is intended to
protect you from contexts where you have in scope plain "#define FOO"
with an empty replacement list (NB: -DFOO on the command line is
different as it means -DFOO=1).  In that case "after all replacements
due to macro expansion" the FOO is no longer there and is not one of
"remaining identifiers" that "are replaced with the pp-number 0".

Now, we can argue whether _POSIX_C_SOURCE can be defined that way, but
that's how idioms are, you use them as a canned recipe so to say, so I
don't think that would be a tangential discussion at best.

-uwe
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.