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 <v2qal7$2c8rq$3@dont-email.me>
Deutsch   English   Français   Italiano  
<v2qal7$2c8rq$3@dont-email.me>

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

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: David Brown <david.brown@hesbynett.no>
Newsgroups: comp.lang.c
Subject: Re: C23 thoughts and opinions
Date: Fri, 24 May 2024 17:10:31 +0200
Organization: A noiseless patient Spider
Lines: 50
Message-ID: <v2qal7$2c8rq$3@dont-email.me>
References: <v2l828$18v7f$1@dont-email.me> <20240523150226.00007e7d@yahoo.com>
 <87a5kg5voc.fsf@nosuchdomain.example.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Fri, 24 May 2024 17:10:31 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="aa31083d92649562fe347cd52a2a5ec5";
	logging-data="2499450"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX18kUFlTcxrEnJypvrhLcK5iF0n/tbbE3uQ="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
 Thunderbird/102.11.0
Cancel-Lock: sha1:xA6jr9VTySpCo4myCueYhCC1K44=
Content-Language: en-GB
In-Reply-To: <87a5kg5voc.fsf@nosuchdomain.example.com>
Bytes: 2948

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.

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".)