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“错误:标量初始化器类型的大括号”错误。让他们警告