C++ Logo

std-proposals

Advanced search

[std-proposals] Small C compatibility extensions for array

From: blacktea hamburger <greenteahamburger_at_[hidden]>
Date: Sun, 23 Oct 2022 20:23:57 +0800
cppreference <https://en.cppreference.com/w/c/language/array>:

*[* *static*(optional) qualifiers(optional) expression(optional) *]*
attr-spec-seq(optional) (1)
*[* qualifiers(optional) *static*(optional) expression(optional) *]*
attr-spec-seq(optional) (2)
expression - any expression other than comma operator
<https://en.cppreference.com/w/c/language/operator_other#Comma_operator>,
designates the number of elements in the array
qualifiers - any combination of const
<https://en.cppreference.com/w/c/language/const>, restrict
<https://en.cppreference.com/w/c/language/restrict>, or volatile
<https://en.cppreference.com/w/c/language/volatile> qualifiers, only
allowed in function parameter lists; this qualifies the pointer type to
which this array parameter is transformed

In function parameter lists, additional syntax elements are allowed within
the array declarators: the keyword *static* and qualifiers, which may
appear in any order before the size expression (they may also appear even
when the size expression is omitted).

In each function call
<https://en.cppreference.com/w/c/language/operator_other#Function_call> to
a function where an array parameter uses the keyword *static* between *[*
 and *]*, the value of the actual parameter must be a valid pointer to the
first element of an array with at least as many elements as specified by
expression:

If qualifiers are present, they qualify the pointer type to which the array
parameter type is transformed

They are also useful for C++ and improve C compatibility.

Received on 2022-10-23 12:24:25