Variable-length automatic arrays are allowed in ISO C99, and as an extension
GCC accepts them in C89 mode and in C++.
On 11/1/06, Scott Brozell <sbrozell.scripps.edu> wrote:
>
> Hi,
>
> On Mon, 23 Oct 2006, David A. Case wrote:
>
> > On Mon, Oct 23, 2006, Scott Brozell wrote:
> >
> > > The larger issue is the merit of picking c89 vs c99, and enforcing
> that by
> > > using for example gcc -std=c89. As for fortran 95 the advantage of
> > > compiler getting feedback about nonstandard language constructs is
> that
> > > we can keep them out of the sources and avoid this platform specific
> > > nuisance.
> >
> > Do you know if sgi mips compilers will accept variable length arrays in
> C?
> > To me, that seems like one of the most useful C99 extensions, since you
> can
> > effectively have temporary arrays without a malloc/free logic around it.
> > However, I don't think that anyone has used this feature yet in the
> Amber
> > code.
>
> Yes, variable length arrays are accepted.
>
> Oct 31 12:23:23pm pusar 636> ~/lang cc -version
> MIPSpro Compilers: Version 7.3.1.2m
> Oct 31 12:23:25pm pusar 637> ~/lang cc vararray.c
> Oct 31 12:23:29pm pusar 638> ~/lang cc -ansi -pedantic vararray.c
> cc-1385 cc: ERROR File = vararray.c, Line = 7
> A parameter is not allowed.
>
> int PrintArray(int d2, int a[][d2][DIM3], int dim1)
> ^
>
> cc-1028 cc: ERROR File = vararray.c, Line = 7
> The expression used must have a constant value.
>
> int PrintArray(int d2, int a[][d2][DIM3], int dim1)
> ^
>
> cc-1028 cc: ERROR File = vararray.c, Line = 26
> The expression used must have a constant value.
>
> int a[D1][DI2][DIM3];
> ^
>
> cc-1028 cc: ERROR File = vararray.c, Line = 26
> The expression used must have a constant value.
>
> int a[D1][DI2][DIM3];
> ^
>
> cc-1028 cc: ERROR File = vararray.c, Line = 26
> The expression used must have a constant value.
>
> int a[D1][DI2][DIM3];
> ^
>
> 5 errors detected in the compilation of "vararray.c".
>
>
> Oct 31 12:24:47pm pusar 642> ~/lang cat vararray.c
> /* exercise variable length arrays in C99 */
>
> #include <stdio.h>
>
> const int DIM3 = 3;
>
> int PrintArray(int d2, int a[][d2][DIM3], int dim1)
> {
> int i = 0;
> for (i = 0; i < dim1; ++i) {
> int j = 0;
> for (j = 0; j < d2; ++j) {
> int k = 0;
> for (k = 0; k < DIM3; ++k) {
> printf("a[%d][%d][%d] = %3d\n", i, j, k, a[i][j][k]);
> }
> }
> }
> return 0;
> }
>
> int main(int argc, char *argv[])
> {
> static const int D1 = 5;
> const int DI2 = 2;
> int a[D1][DI2][DIM3];
> int i = 0;
> for (i = 0; i < D1; ++i) {
> int j = 0;
> for (j = 0; j < DI2; ++j) {
> int k = 0;
> for (k = 0; k < DIM3; ++k) {
> a[i][j][k] = 100 * i + 10 * j + k;
> printf("A[%d][%d][%d] = %3d\n", i, j, k, a[i][j][k]);
> }
> }
> }
> putchar('\n');
> PrintArray(DI2, a, D1);
> return 0;
> }
>
>
--
... there have been two really clean,
consistent models of programming so far:
the C model and the Lisp model.
These two seem points of high ground,
with swampy lowlands between them.
--Paul Graham
Received on Wed Nov 01 2006 - 06:07:35 PST