I posted this question on StackOverflow, but someone commented and advised me to publish it here.
Here the terms K&R1 and K&R2 refer to a book written by the C creators about the language. K&R1 is the first edition (1978, before the standardization), and K&R2 is from 1988.
entry is a reserved identifier in K&R1, which seems to come from PL/I and FORTRAN.
Someone already posted a question about entry here, and the accepted answer said some compilers implemented it, but the K&R2 states
entry, formerly reserved but never used, is no longer reserved
Who is right ? Did the K&R2 take a shortcut because it was almost not used, and maybe it wasn't relevant for the reader ? Then, if entry has existed, which compilers did implement it ?
In their answer, the author also shared this link, but it only suggests some compilers implemented it, without giving any example though :
Some C compilers prior to the standard implemented that keyword. Since it was never part of any version of the C standard, it has no defined standardized meaning.
I asked this question by curiosity, as I'm very interested about early C.


entrywith a footnote "Traditionally reserved, but omitted from ANSI C." This footnote is also used for theasmandfortranentries. – Jon Custer Jan 30 '24 at 14:27_Boolwas reserved in C89 by virtue of starting with an underscore and a capital letter, and as far as I know, this reservation stays in place even in the latest draft. Most post-C90 keywords were in fact of this form.volatileandrestrictwere never reserved without being given grammar productions and meaning. – user3840170 Jan 31 '24 at 13:24dest = (dest & ~mask) ^ (src & mask) ^(UNSPECIFIED & ~mask & src), but with each operand read only once. – supercat Jan 31 '24 at 17:57*(int*)((char*)arr1 + i) = *(int*)((char*)arr2 + i);was rather a nuisance. Further, using type casts in such fashion would suppress what would otherwise be useful diagnostics in situations where the argument of the inner cast wasn't a pointer of the outer cast's type. – supercat Jan 31 '24 at 20:08*(arr1 @ i) = *(arr2 @ i)where @ stands for the desired operation. I don't get what extra benefit apart from conciseness you're expecting. Also, while arr1 and arr2 could be properly aligned, after adding an arbitrary value that would not necessarily be true, causing bus errors. For sizeof(T) being a small power of 2, writing arr1[i/sizeof(T)] = arr2[i/sizeof(T)] guarantees pointer safety and incurs little penalty; for most larger sizes memcpy is likely more efficient. – Leo B. Jan 31 '24 at 22:52stride += zero;is needed to prevent clang from adding three useless instructions to each loop iteration in an effort to "optimize" it). – supercat Feb 01 '24 at 16:05