0

I am trying to create this simple program which displays the data of the array back to the user again.. I want to create a variable length array. In this program the user is first asked the number of elements of the array followed by the data.

The problem is that in some of the IDE this code runs completely fine but in others it gives the error that variable length array is not allowed.... So what is correct?

void main()
{
    int t;
    cin>>t;
    int ar[t];
    for(int i=0;i<t;i++)
    {
        cin>>ar[i];
    }

    for(int i=0;i<t;i++)
    {
        cout<<ar[i]<<"\t";
    }
}

For eg. This doesn't work in Turbo C++... But runs in this IDE's http://www.tutorialspoint.com/compile_cpp11_online.php

https://www.codechef.com/ide

1
  • VLAs are kinda pointless in C++ when you have std::vector. Arguably std::vector is even better because it calls attention to the fact that you're allocating the memory dynamically instead of statically (along with being more type-safe). Commented Jan 24, 2016 at 20:30

1 Answer 1

3

Standard C++ does not support variable length arrays. Some implementations provide it as an extension but as you have already found out, relying on them makes for non-portable code.

I recommend you use a std::vector instead. It works with pure standard C++.

int size;
if (!(std::cin >> size) || (size < 0))
  throw std::invalid_argument {"bad size"};
std::vector<int> numbers (size);

In GCC and Clang, you can use the -pedantic compiler switch to turn off any non-standard extensions. This will help you avoid accidentally writing non-portable code. Of course, you should also compile with -Wall, -Wextra and -Werror.

Sign up to request clarification or add additional context in comments.

7 Comments

VLAs were very quietly added in C++14.
@5gon12eder actually I haven't been introduced that yet.. I will try to study about it.. Thank You Very Much!
@Blrfl Can you cite where?
@NathanOliver: My error: N3639 was adopted into the draft but never made the final version. Interestingly, the c++1x and c++14 modes of a few compilers I tried don't complain about it.
@Blrfl GCC allows VLA's as an non standard extension. I am not sure if clang does or does not. MSVS does not allow them at all.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.