Question

I have a nagging problem with GCC compiler errors "error: braces around scalar initializer for type". I have seen others complaining about this, although they describe it as a warning (gcc warning: braces around scalar initializer)

I am compiling code which is not mine to edit, and I get a lot of these errors throughout the code.

Basic Pattern is:

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' 

I know I can remove the braces {} around the float scaler to remove this error, but I do not want to modify the code in any way. Is there a flag I can give to GCC (currently using MinGW gcc 4.8.1). i.e. "std=c++03", or something to get these errors at least displayed as warnings.

Thanks

Was it helpful?

Solution

I'm not 100% sure, but I believe there is no such option. The construct you have is not meaning the same thing in the two cases - first one is an initialization of one structure, the second is a a strcuture containing a structure or array. Which of course float isn't.

You may be able to work around it with

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

At least clang is happy with that. As is g++. That may be easier than changing a lot of initialization statements with extra braces in them. But it is admittedly still a change to the source code. Unfortunately, I'm pretty certain that this is necessary.

Complete example that I was testing with:

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



t_ t2 = { {0.3}, 0 };


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

Edit: If it's not at all possible to edit the source, you'll need to parse the source code, identify the incorrect braces and output "correct" code. The more I think about this, the less I believe that it's at all possible to fix without some sort of edit to the source. Or that it has ever compiled...

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top