用STD=C++ 11扩展的C++ VLA 如何在VC++中工作,尽管给出了STD=C++ 11编译选项。根据通用条款: P>>在ISO C99中允许可变长度自动数组,作为扩展GCC接受C90模式和C++中的.

用STD=C++ 11扩展的C++ VLA 如何在VC++中工作,尽管给出了STD=C++ 11编译选项。根据通用条款: P>>在ISO C99中允许可变长度自动数组,作为扩展GCC接受C90模式和C++中的.,c++,gcc,C++,Gcc,如a中所述,有一个迂腐的选项也不允许扩展: -Wpedantic -迂腐的 发布严格ISO和ISO C++要求的所有警告;拒绝所有使用禁止扩展的程序,以及其他一些程序 不遵循ISO和ISO C++的程序。对于ISO C,遵循 使用任何-std选项指定的ISO C标准版本 有效的ISO和ISO C++程序应该有或没有这个选项,尽管很少需要ANSI或-STD选项编译。 指定所需的ISO C版本。但是,如果没有 选项,某些GNU扩展和传统的C和C++特征是 也支持。使用此选项,它们将被拒绝 -Wped

如a中所述,有一个迂腐的选项也不允许扩展:

-Wpedantic

-迂腐的

发布严格ISO和ISO C++要求的所有警告;拒绝所有使用禁止扩展的程序,以及其他一些程序 不遵循ISO和ISO C++的程序。对于ISO C,遵循 使用任何-std选项指定的ISO C标准版本

<>有效的ISO和ISO C++程序应该有或没有这个选项,尽管很少需要ANSI或-STD选项编译。 指定所需的ISO C版本。但是,如果没有 选项,某些GNU扩展和传统的C和C++特征是 也支持。使用此选项,它们将被拒绝

-Wpedantic不会对使用名称以“\uu”开头和结尾的备用关键字发出警告消息。这个候补的 格式还可用于禁用非ISO“\uuu intN”的警告 类型,即“输入”。在中也禁用了学究式警告 扩展名后面的表达式。但是,只有系统头 文件应使用这些转义路径;应用程序应 避开它们。请参阅备用关键字

一些用户尝试使用-Wpedantic检查程序是否严格符合ISO C标准。他们很快发现,它并没有达到他们想要的效果 want:它发现了一些非ISO实践,但不仅仅是针对 哪个ISO C需要诊断,而其他一些ISO C需要诊断 已添加诊断

报告任何不符合ISO C的情况的功能在某些情况下可能有用,但需要相当多的额外功能 工作,将是非常不同的-Wpedantic。我们没有计划 在不久的将来支持此功能

如果用-std指定的标准表示C的GNU扩展方言,如“gnu90”或“gnu99”,则有相应的 基本标准,GNU扩展方言所依据的ISO C版本 基于。在需要的地方会给出-Wpedantic发出的警告 按基本标准。这样的警告没有意义 仅适用于非指定GNU C方言的功能,因为 定义C语言的GNU方言包括编译器的所有特性 支持给定的选项,并且不会有任何警告 大约

-学究式错误

当基本标准see-Wpedantic需要诊断时,给出一个错误,在某些情况下,在以下位置存在未定义的行为: 编译时以及在某些其他情况下不阻止编译 根据标准有效的程序。这不是 相当于-Werror=pedantic,因为这会导致错误 选项,后者不启用,反之亦然

鼓起勇气的部分是我的重点——显然有些事情可能还是会过去。不过,我觉得这个选项已经足够满足我的需要了。

正如a中提到的,有一个迂腐的选项,它也不允许扩展:

-Wpedantic

-迂腐的

发布严格ISO和ISO C++要求的所有警告;拒绝所有使用禁止扩展的程序,以及其他一些程序 不遵循ISO和ISO C++的程序。对于ISO C,遵循 使用任何-std选项指定的ISO C标准版本

<>有效的ISO和ISO C++程序应该有或没有这个选项,尽管很少需要ANSI或-STD选项编译。 指定所需的ISO C版本。但是,如果没有 选项,某些GNU扩展和传统的C和C++特征是 也支持。使用此选项,它们将被拒绝

-Wpedantic不会对使用名称以“\uu”开头和结尾的备用关键字发出警告消息。这个候补的 格式还可用于禁用非ISO“\uuu intN”的警告 类型,即“输入”。在中也禁用了学究式警告 扩展名后面的表达式。但是,只有系统头 文件应使用这些转义路径;应用程序应 避开它们。请参阅备用关键字

一些用户尝试使用-Wpedantic检查程序是否严格符合ISO C标准。他们很快发现,它并没有达到他们想要的效果 want:它发现了一些非ISO实践,但不仅仅是针对 哪个ISO C需要诊断,而其他一些ISO C需要诊断 已添加诊断

报告任何不符合ISO C的情况的功能在某些情况下可能有用,但需要相当多的额外功能 工作,将是非常不同的-Wpedantic。我们没有计划 在不久的将来支持此功能

如果用-std指定的标准表示C的GNU扩展方言,如“gnu90”或“gnu99”,则有相应的 基础标准,ISO C的版本 GNU扩展方言 基于。在需要的地方会给出-Wpedantic发出的警告 按基本标准。这样的警告没有意义 仅适用于非指定GNU C方言的功能,因为 定义C语言的GNU方言包括编译器的所有特性 支持给定的选项,并且不会有任何警告 大约

-学究式错误

当基本标准see-Wpedantic需要诊断时,给出一个错误,在某些情况下,在以下位置存在未定义的行为: 编译时以及在某些其他情况下不阻止编译 根据标准有效的程序。这不是 相当于-Werror=pedantic,因为这会导致错误 选项,后者不启用,反之亦然


鼓起勇气的部分是我的重点——显然有些事情可能还是会过去。不过,我觉得这个选项已经足够满足我的需要了。

你可能需要-pedantic和-std=c++11甚至-pedantic错误。@JonathanLeffler谢谢,它现在已经用-pedantic选项给出了警告!!您可能需要-pedantic以及-std=c++11甚至-pedantic错误。@JonathanLeffler谢谢,它现在已经用-pedantic选项发出警告!!
#include<iostream>

using namespace std;

int fun()
{
    int j;
    cin>>j;
    return j;
}

int main()
{
    const int i=fun();

    int j[i];
    return 0;
}