Am Mittwoch, dem 14.08.2024 um 16:12 +0200 schrieb Alejandro Colomar: > Hi Martin, > > On Wed, Aug 14, 2024 at 03:50:00PM GMT, Martin Uecker wrote: > > An operator that returns an array with all dimensions of a multi-dimensional > > array would make a a lot of sense to me. > > > > > > double array[4][3][2]; > > > > // array_dims(array) = (constexpr size_t[3]){ 4, 3, 2 } > > And what if array[4][n][2]? No constexpr anymore, which is bad.
> > > > int dim1 = (array_dims(array))[0] > > int dim2 = (array_dims(array))[1] > > int dim3 = (array_dims(array))[2] > > > > You can then implement lengthof in terms of this operator: > > > > #define lengthof(x) (array_dims(array)[0]) > > Not really. This implementation would result in less constant > expressions that my proposal. That's detrimental for diagnostics and > usability. Yes, this would be a downside when implementing lengthof in this way. > > And the fundamental operator would be very complex, to allow users > implementing simpler wrappers. I think the fundamental operators should > be as simple as possible, in the spirit of C, and let users build on top > of those basic tools. > > This reminds me of the 'static' specifier for array parameters, which is > conflated with two meanings: nonnull and length. I'd rather have a way > to specify nullness, and another one to specify length, and let users > compose them. > > At first glance I oppose this array_dims operator. Opinionated as usual ;-) > > and you can obtain the rank by applying lengthof to the array: > > > > #define rank(x) lengthof(array_dims(x)) > > I'm curious to see what kind of code would be enabled by a rank() > operator in C that we can't write at the moment. There seems to be no generic way to get all dimensions from a multi-dimensional array of arbitrary rank. Martin > > > If the array is constexpr for regular arrays and array > > indexing returns a constant again for constexpr arrays, this > > would all work out. > > > > Martin > > Have a lovely day! > Alex > -- Univ.-Prof. Dr. rer. nat. Martin Uecker Graz University of Technology Institute of Biomedical Imaging