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

Posted

技术标签:

【中文标题】gcc 的扩展初始化程序列出警告【英文标题】:gcc's extended initializer lists warning 【发布时间】:2012-08-02 07:04:19 【问题描述】:

gcc 将警告以下示例代码:

struct someStruct 
    char c;
    int i;
;

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

    return 0;

警告:扩展初始值设定项列表仅适用于 -std=c++0x 或 -std=gnu++0x

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

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

【问题讨论】:

【参考方案1】:

您缺少=

someStruct s =  'a', 3 ;

【讨论】:

对,但那是一个赋值而不是初始化。我只想知道为什么即使在 C++98 模式下它也会编译给定的代码。 @scai 不,那是初始化。这是复制初始化。 啊,你是对的,谢谢。我仍然对警告感到好奇:)。 @scai 如果您使用更严格的编译标志(尝试-Wall -Wextra -pedantic-errors -std=c++98),那么这将是编译错误,而不是警告,因为它不是符合 C++98/C++03 标准的语法没有= 符号。 @scai - 该标准明确允许编译器在发出诊断(警告)后接受他们理解其含义的代码。就像“警告:缺少分号”一样,插入分号,继续编译。

以上是关于gcc 的扩展初始化程序列出警告的主要内容,如果未能解决你的问题,请参考以下文章

GCC 常用编译选项

忽略 GCC“错误:标量初始化器类型的大括号”错误。让他们警告

指定初始化器:GCC 警告消息:接近初始化和其他警告消息

为啥使用字符串初始化没有 const 的数组时 gcc 不给出警告?

初始化复杂结构,GCC 警告:已覆盖副作用的初始化字段

gcc编译选项-Wall(编译警告:未使用变量变量未初始化类型转换等)