Sujet : Re: Results of survey re. a new array size operator
De : antispam (at) *nospam* fricas.org (Waldek Hebisch)
Groupes : comp.lang.cDate : 25. Jan 2025, 22:18:34
Autres entêtes
Organisation : To protect and to server
Message-ID : <vn3kf8$2ji7k$1@paganini.bofh.team>
References : 1 2 3 4
User-Agent : tin/2.6.2-20221225 ("Pittyvaich") (Linux/6.1.0-9-amd64 (x86_64))
James Kuyper <
jameskuyper@alumni.caltech.edu> wrote:
On 1/24/25 18:13, Waldek Hebisch wrote:
James Kuyper <jameskuyper@alumni.caltech.edu> wrote:
...
One of the most important goals of the C standard is backwards
compatibility. A lower case keyword would break any program that was
already using that keyword as a user-defined identifier.
>
Lower case _reserved word_ would break compatibility. But in most
cases there is no need to reserve a keyword: simply treat it as
predefined identifier with magic meaning. I user want gives it
different meaning, the new meaning would be used instead of
predefiend one.
Unless the syntax that contains the new keyword is such that a
user-defined identifier could never occur in the same location, I don't
see how that would work.
In this particular case, countof(array) certainly does NOT qualify. It's
meant to be used wherever an integer value for the length of the array
is needed. And in any such context, a user-named function returning an
integer value or a user-named macro expanding to an expression with an
integer value is also allowed (in some contexts, only the latter would
be a possibility).
AFAICS there is no trouble. Namely, before C23 compiler had to
handle undeclared function using "implicit int" rule. So it had
to distingush between declartations, function calls to declared
functions and function calls to undeclared functions. The
new rule informally could be:
whenever pre-C23 compiler would use implicit int rule and the
function name is 'countof' use new semantics of 'countof'
There is some complication: Presumably 'countof' should be
applicable to types. AFAICS when parser sees 'countof' with no
prior declaration it can activate mode of allowing both
expressions and types. This should be no big burden as already
'sizeof' gets similar treatment. So parsing could go on
with minor tweak and the rest can be handled at semantic level.
AFAICS what I describe is compatible extention: it will treat
any valid C23 program as before and only assign meaning to
previously invalid programs. At it should be implementable
with modest effort in any C compiler.
Of course, it would break compatibility for C compilers that
want to allow undeclared functions as an extention to C23,
but IIUC this is not a concern to the standard.
-- Waldek Hebisch