忽略 GCC "error: braces around scalar initializer for type"错误。发出警告

Ignoring GCC "error: braces around scalar initializer for type" errors. Make them warnings

本文关键字:错误 type 警告 for scalar error GCC braces 忽略 around initializer      更新时间:2023-10-16

我有一个困扰GCC编译器错误的问题"error:大括号包围了类型的标量初始化器"。我看到其他人对此抱怨,尽管他们将其描述为警告(gcc warning:大括号环绕标量初始化器)

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

基本模式为:

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' 

我知道我可以删除浮点数周围的大括号{}来消除这个错误,但我不想以任何方式修改代码。是否有一个标志我可以给GCC(目前使用MinGW GCC 4.8.1)。即。"std=c++03",或者其他让这些错误至少显示为警告的东西。

谢谢

我不是百分之百确定,但我相信没有这样的选择。在这两种情况下,你所拥有的结构并不意味着同样的事情——第一个是一个结构的初始化,第二个是一个包含结构或数组的结构。当然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;
}

编辑:如果根本不可能编辑源代码,则需要解析源代码,识别不正确的大括号并输出"正确"的代码。我越想这个问题,我就越不相信在没有对源代码进行某种编辑的情况下修复它是可能的。或者它曾经编译过……