Reputation: 1103
How is VLA working in C++ despite giving -std=c++11
compile option. As per GCC:
Variable-length automatic arrays are allowed in ISO C99, and as an extension GCC accepts them in C90 mode and in C++.
#include<iostream>
using namespace std;
int fun()
{
int j;
cin>>j;
return j;
}
int main()
{
const int i=fun();
int j[i];
return 0;
}
Upvotes: 1
Views: 489
Reputation: 25980
As Jonathan mentions in a comment, gcc has the pedantic
option that also disallows extensions:
-Wpedantic
-pedantic
Issue all the warnings demanded by strict ISO C and ISO C++; reject all programs that use forbidden extensions, and some other programs that do not follow ISO C and ISO C++. For ISO C, follows the version of the ISO C standard specified by any
-std
option used.Valid ISO C and ISO C++ programs should compile properly with or without this option (though a rare few require
-ansi
or a-std
option specifying the required version of ISO C). However, without this option, certain GNU extensions and traditional C and C++ features are supported as well. With this option, they are rejected.
-Wpedantic
does not cause warning messages for use of the alternate keywords whose names begin and end with ‘__
’. This alternate format can also be used to disable warnings for non-ISO ‘__intN
’ types, i.e. ‘__intN__
’. Pedantic warnings are also disabled in the expression that follows__extension__
. However, only system header files should use these escape routes; application programs should avoid them. See Alternate Keywords.Some users try to use
-Wpedantic
to check programs for strict ISO C conformance. They soon find that it does not do quite what they want: it finds some non-ISO practices, but not all—only those for which ISO C requires a diagnostic, and some others for which diagnostics have been added.A feature to report any failure to conform to ISO C might be useful in some instances, but would require considerable additional work and would be quite different from
-Wpedantic
. We don’t have plans to support such a feature in the near future.Where the standard specified with
-std
represents a GNU extended dialect of C, such as ‘gnu90
’ or ‘gnu99
’, there is a corresponding base standard, the version of ISO C on which the GNU extended dialect is based. Warnings from-Wpedantic
are given where they are required by the base standard. (It does not make sense for such warnings to be given only for features not in the specified GNU C dialect, since by definition the GNU dialects of C include all features the compiler supports with the given option, and there would be nothing to warn about.)
-pedantic-errors
Give an error whenever the base standard (see
-Wpedantic
) requires a diagnostic, in some cases where there is undefined behavior at compile-time and in some other cases that do not prevent compilation of programs that are valid according to the standard. This is not equivalent to-Werror=pedantic
, since there are errors enabled by this option and not enabled by the latter and vice versa.
The emboldened part is my emphasis — apparently some things may still slip by. Still, I find this option enough for my needs.
Upvotes: 3