c++ - 忽略 GCC "error: braces around scalar initializer for type"错误。让他们警告

标签 c++ gcc compiler-construction compiler-errors braces

我对 GCC 编译器错误“错误:类型的标量初始值设定项周围的大括号”有一个恼人的问题。我看到其他人对此提示,尽管他们将其描述为警告 ( gcc warning: braces around scalar initializer )

我正在编译不是我可以编辑的代码,并且我在整个代码中遇到了很多这样的错误。

基本模式是:

struct t_
{
    float f;
    int i;
};

float f = { 0.3 };      //Compiler is all happy with this.
int i = {0};            //Compiler is all happy with this too.
t_ t1 = { 0.3, 0 };     //Compiler is all happy with this too.
t_ t2 = { {0.3}, 0 };   //Compiler ERROR: braces around scalar initializer for type 'float' 

我知道我可以删除 float 缩放器周围的大括号 {} 以消除此错误,但我不想以任何方式修改代码。有没有我可以给 GCC 的标志(目前使用 MinGW gcc 4.8.1)。即“std=c++03”,或至少将这些错误显示为警告的东西。

谢谢

最佳答案

我不是 100% 确定,但我相信没有这样的选择。在这两种情况下,您拥有的构造并不意味着同一件事 - 第一种是一个结构的初始化,第二种是包含结构或数组的结构。 float 当然不是。

你可以用

解决它
struct t_
{
    struct 
    {
       float f;
    };
    int i;
};

至少 clang 对此很满意。和 g++ 一样。这可能比更改大量带有额外大括号的初始化语句更容易。但不可否认,它仍然是对源代码的更改。不幸的是,我很确定这是必要的。

我正在测试的完整示例:

struct t_
{
    struct 
    {
        float f;
    };
    int i;
};



t_ t2 = { {0.3}, 0 };


int main()
{
    t2.f = 7;
}

编辑: 如果根本无法编辑源代码,您将需要解析源代码,识别不正确的大括号并输出“正确”代码。我对此思考得越多,我就越不相信在不对源代码进行某种编辑的情况下完全可以修复。或者它曾经编译过...

关于c++ - 忽略 GCC "error: braces around scalar initializer for type"错误。让他们警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22415931/

相关文章:

c++ - 在 C++ 中使用括号表示法将二维数组传递给方法的问题

c++ - 光线追踪球体反射错误

c++ - 类型名、类型成员和非类型成员 : is it valid code?

c++ - 在c中编译dll时传递参数

php - 将 perl/python/php 脚本编译成 linux 可执行文件的好编译器?

c++ - 分析说明

c++ - 链接静态单例类

c - 结构初始化符号不适用于堆分配的存储

c++ - 可以将自旋锁与 O(1) 非内存连续代码一起使用吗?

c - 未定义引用?但我已经实现了这个功能