Sujet : Re: Integral types and own type definitions (was Re: Suggested method for returning a string from a C program?)
De : Keith.S.Thompson+u (at) *nospam* gmail.com (Keith Thompson)
Groupes : comp.lang.cDate : 26. Mar 2025, 23:15:09
Autres entêtes
Organisation : None to speak of
Message-ID : <87zfh74exe.fsf@nosuchdomain.example.com>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
User-Agent : Gnus/5.13 (Gnus v5.13)
Janis Papanagnou <janis_papanagnou+
ng@hotmail.com> writes:
On 26.03.2025 20:38, Keith Thompson wrote:
[...]
If -5 were a single token (an integer constant), then 6-5 would be an
integer constant 6 followed by an integer constant -5, a syntax error.
>
This is generally not true; that depends on the syntax rules. It is
perfectly fine to have rules for 2-ary addition and subtraction and
have also negative (and positive) literals or expressions with unary
plus and minus operators.
>
Disclaimer: As usual I'm not speaking about any peculiarity that "C"
may (or may not) have defined in its standard, but generally.
I suppose it would be possible to define a language syntax that makes
-5 a single token and still parses 6-5 as (literal 6, binary-minus,
literal-5). C is certainly not that language. If a future C
standard made -5 a valid integer literal, I'm not at all sure what
other changes would have to be made to avoid breaking existing code.
You'll want to have both unary and binary "-" operators anyway,
so you can write "-x". As long as you have a unary "-" operator,
making "-5" a single token doesn't give you much -- and then you
have to explain why "-x" is two tokens but "-5" is just one, or why
"-5" and "- 5" are parsed differently.
Note that the strto*() functions recognize strings that look like
an integer constant/literal "optionally preceded by a plus or
minus sign".
I don't know of any language that uses "-" for both negation (prefix,
one operand) and subtraction (infix, two operands) and treats -5
as a single token rather than a unary minus operator applied to the
constant/literal "5".
-- Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.comvoid Void(void) { Void(); } /* The recursive call of the void */