gcc的扩展初始化程序列出了警告

sca*_*cai 2 c++ gcc g++

gcc 将警告以下示例代码:

struct someStruct {
    char c;
    int i;
};

int main() {
    someStruct s { 'a', 3 };

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

警告:扩展初始化程序列表仅适用于-std = c ++ 0x或-std = gnu ++ 0x

我想让我的代码与没有C++ 11支持的旧编译器兼容.现在,当我尝试用它们编译它时,-std=c++98甚至-ansi -pedantic它仍然发出相同的警告并编译.

这是编译器错误还是我错过了什么?

Luc*_*ore 7

你错过了一个=:

someStruct s = { 'a', 3 };
Run Code Online (Sandbox Code Playgroud)

  • @scai如果你使用更严格的编译标志(尝试`-Wall -Wextra -pedantic-errors -std = c ++ 98`)那么这将是一个编译错误,而不是一个警告,因为它不是C++ 98/C++ 03标准兼容语法,没有`=`符号. (2认同)
  • @scai - 标准明确允许编译器在发出诊断(警告)后接受他们理解其含义的代码.就像"警告:丢失semocolon",插入分号,继续编译. (2认同)