Re: C types, was What attributes of a programming language simplify its use?

David Brown <david.brown@hesbynett.no>
Fri, 9 Dec 2022 13:21:17 +0100

          From comp.compilers

Related articles
| List of all articles for this month |
From: David Brown <david.brown@hesbynett.no>
Newsgroups: comp.compilers
Date: Fri, 9 Dec 2022 13:21:17 +0100
Organization: A noiseless patient Spider
References: 22-12-001 22-12-003 22-12-004 22-12-007 22-12-010 22-12-011 22-12-012
Injection-Info: gal.iecc.com; posting-host="news.iecc.com:2001:470:1f07:1126:0:676f:7373:6970"; logging-data="74785"; mail-complaints-to="abuse@iecc.com"
Keywords: types
Posted-Date: 10 Dec 2022 16:25:23 EST
Content-Language: en-GB
In-Reply-To: 22-12-012

On 08/12/2022 21:42, Hans-Peter Diettrich wrote:
> On 12/8/22 2:53 AM, Keith Thompson wrote:
>> Hans-Peter Diettrich <DrDiettrich1@netscape.net> writes:
>>> On 12/6/22 6:56 PM, Keith Thompson wrote:
>> [...]
>>>>   "int int" is a syntax error.
>>>
>>> I could not find in the (older) C++ grammar why "int int" should be a
>>> *syntax* error. Aren't both "int" and "long" simple-type-specifier's
>>> which can occur multiple times in a decl-specifier-seq?
>>
>> No, there are specific rules that specify the way they can be used.
>> In the 2011 ISO C standard standard (I use the draft from
>> https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf), the valid
>> type specifiers are listed in section 6.7.2.
>
> Thanks for the link :-)
>
>>      At least one type specifier shall be given in the declaration
>>      specifiers in each declaration, and in the specifier-qualifier
>>      list in each struct declaration and type name. Each list of type
>>      specifiers shall be one of the following multisets (delimited
>>      by commas, when there is more than one multiset per item);
>>      the type specifiers may occur in any order, possibly intermixed
>>      with the other declaration specifiers.
>
> So let me repeat my questions:
>
> - Why is "int int" a syntax error? "At least one..." allows for more
> than one type-specifier in declaration-specifiers (6.7).
>
> - What's "long int long"? My current (Arduino) C++ compiler doesn't flag
> it as an error.




To my reading of the C standard (I'm looking at C11 at the moment, the
same version as Keith - if you don't have a copy, it is freely available
from Keith's link), "int int" is /not/ a syntax error. It is a
/constraint violation. "int" and "long" are syntactically classified as
"type specifiers", and the syntax for declarations allows any number of
type specifiers. But the constrains given in 6.7.2 put limits on the
combinations that are allowed. "int int" is not on that list, so it is
a constraint error. "long long int" /is/ on the list, and the type
specifiers can be re-ordered, so "long int long" is fine (it's a 64-bit
signed integer type on the Arduino).


I believe the difference between syntax errors and constrain violations
in a case like this is purely for historical reasons.


C++ has the same rules, but the standards are not as explicit about
syntax and constraints.


(For an alternative way to consider handling of "long" and "short" in C,
you might enjoy this proposal:
<https://www.open-std.org/JTC1/sc22/wg21/docs/papers/2018/p0989r0.pdf>)


Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.