Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connections
Warning: mysqli::query(): Couldn't fetch mysqli in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\index.php on line 66
Article <87fru72elx.fsf@nosuchdomain.example.com>
Deutsch   English   Français   Italiano  
<87fru72elx.fsf@nosuchdomain.example.com>

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

Path: ...!weretis.net!feeder9.news.weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Keith Thompson <Keith.S.Thompson+u@gmail.com>
Newsgroups: comp.lang.c
Subject: Re: C23 thoughts and opinions
Date: Fri, 24 May 2024 12:29:14 -0700
Organization: None to speak of
Lines: 59
Message-ID: <87fru72elx.fsf@nosuchdomain.example.com>
References: <v2l828$18v7f$1@dont-email.me> <20240523150226.00007e7d@yahoo.com>
	<87a5kg5voc.fsf@nosuchdomain.example.com>
	<v2qal7$2c8rq$3@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain
Injection-Date: Fri, 24 May 2024 21:29:15 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="9bf1a2728fa7020763691602348055f5";
	logging-data="2596634"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+HJKyZ2BPetA8eaRvizEy1"
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux)
Cancel-Lock: sha1:UzlBBzlXK2kpLKzhnnfd4ZsKkLo=
	sha1:tIoh1cbZWFWmzzu9TE5XiONoDJI=
Bytes: 3505

David Brown <david.brown@hesbynett.no> writes:
> On 23/05/2024 18:40, Keith Thompson wrote:
>> Michael S <already5chosen@yahoo.com> writes:
>> [...]
>>> Removed
>> [...]
>>> 7) static_assert is not provided as a macro defined in <assert.h>
>>> (becomes a keyword)
>>> 8) thread_local is not provided as a macro defined in <threads.h>
>>> (becomes a keyword)
>>>
>> [...]
>>> 7) bad. Breaks existing code for weak reason
>>> 8) bad. Breaks existing code for weak reason
>> In pre-C23, _Static_assert and _Thread_local are keywords, and
>> static_assert and thread_local are macros that expand to those keywords.
>> In C23, _Static_assert, _Thread_local, static_assert, and
>> thread_local
>> are all keywords.  Code that simply uses the old ugly keywords would not
>> break.
>> Code that does something like "#ifdef static_assert".  I suppose the
>> headers could have retained the old macro definitions.
>>      #define static_assert static_assert
>>      #define thread_local thread_local
>> 
>
> The sort of code that could theoretically break is when you have
> definitions like this:
>
> #define STATIC_ASSERT_NAME_(line)       STATIC_ASSERT_NAME2_(line)
> #define STATIC_ASSERT_NAME2_(line)      assertion_failed_at_line_##line
> #define static_assert(claim, warning) \
>     typedef struct { \
>         char STATIC_ASSERT_NAME_(__COUNTER__) [(claim) ? 2 : -2]; \
>     } STATIC_ASSERT_NAME_(__COUNTER__)
>
> That works in any C version, until C23, almost as well as
> _static_assert.  I used this when C11 support was rare in the tools I
> used.

You mean _Static_assert.

> While using #define for a C keyword is undefined behaviour, in
> practice I think you'd have a hard time finding code and a compiler
> that used such a macro and which did not work just as well in C23
> mode.
>
> (I don't know if anyone is in the habit of declaring macros named
> "thread_local".)

"static_assert" is already a macro defined in <assert.h> starting in
C11.  The above code is valid in pre-C23, but will break in C11 and C17
if it includes <assert.h> directly or indirectly.  You can fix it by
adding "#undef static_assert" or by picking a different name, or by
making your macro definition conditional on __STDC_VERSION__ >= 202311L.

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