Using _POSIX_SEM_VALUE_MAX not _SC_SEM_VALUE_MAX?
Andreas Schwab
schwab@linux-m68k.org
Sat Jul 8 15:30:53 GMT 2023
On Jul 08 2023, Paul Smith wrote:
> Unfortunately because I am using limits.h from the clang intrinsics /
> resource directory (else many other things break), _POSIX_SEM_VALUE_MAX
> is not defined.
POSIX requires conforming implementations to define
_POSIX_SEM_VALUE_MAX.
> I can't quite figure out why, and my attempts to generate preprocessor
> output to track it down through the #include / #define maze have
> failed. But the error I get (from clangd) suggests I want to be using
> _SC_SEM_VALUE_MAX and indeed if I make that change it works.
_SC_SEM_VALUE_MAX is related, but has a different role. It is the
argument to sysconf to retrieve the runtime value of SEM_VALUE_MAX.
> Or at least expanding the above to use it as a last resort, as in:
>
> #if defined(SEM_VALUE_MAX)
> static constexpr ptrdiff_t _S_max = SEM_VALUE_MAX;
> #elif defined(_POSIX_SEM_VALUE_MAX)
> static constexpr ptrdiff_t _S_max = _POSIX_SEM_VALUE_MAX;
> #else
> static constexpr ptrdiff_t _S_max = _SC_SEM_VALUE_MAX;
That needs to be sysconf (_SC_SEM_VALUE_MAX), and thus is not suitable
for a constexpr.
--
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1
"And now for something completely different."
More information about the Gcc
mailing list