http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51352

             Bug #: 51352
           Summary: g++ can't pass variable-length array as a function
                    argument
    Classification: Unclassified
           Product: gcc
           Version: 4.6.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: jvgr...@gmail.com


According to http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html, gcc
supports variable-length arrays as an extension when compiling C++ code.  An
example is given on that page of how to pass such an array as an argument to a
function.  However, I haven't been able to get it to work.  As an example, the
simple program

  #include <iostream>
  #include <cstdlib>

  void fill_array(int dim, int array[dim][dim]);

  int main(int argc, char *const argv[]) {
    int dim = atoi(argv[1]);
    int array[dim][dim];
    fill_array(dim, array);
    for(int i = 0; i < dim; ++i) {
      for(int j = 0; j < dim; ++j) {
        std::cout << array[i][j] << "\n";
      }
    }
  }

  void fill_array(int dim, int array[dim][dim]) {
    int counter = 0;
    for(int i = 0; i < dim; ++i) {
      for(int j = 0; j < dim; ++j) {
        array[i][j] = counter++;
      }
    }
  }

won't compile under g++ version 4.6.1 (I think that's the version I was
running), despite what that page claims, instead giving errors claiming that
the parameter dim is being used outside the function.  (gcc in C99 mode can
compile the code.)

Reply via email to