C语言 gcc 警告:标量初始值设定项周围的大括号

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3462513/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-02 06:08:25  来源:igfitidea点击:

gcc warning: braces around scalar initializer

clookup-tablesgcc-warning

提问by HaggarTheHorrible

I have look-up-table as defined below and I'm making use of GCC. When I compile I get warnings as

我有如下定义的查找表,我正在使用 GCC。当我编译时,我收到警告

warning: braces around scalar initializer

What does this warning mean? How should I initialize this LUT? Am I making a mistake in initializing this structures?

这个警告是什么意思?我应该如何初始化这个 LUT?我在初始化这个结构时犯了一个错误吗?

Help!!

帮助!!



typedef struct TECH
{

    float velocity1, velocity2;
    float temp;
    float measure;

    int id;
    float storage[64];

}TECH;

struct TECH lut_model_1[2] = {{{296.001465},
        {74.216972},
        {2.025908},
        {1.516384},
        {1},
        {0.001746,
        0.000256, 0.006216, 0.005249, -0.001668, -0.001377, 0.009865, 0.010454, -0.000288, -0.005853, 0.010584, 0.015440, 0.000465, -0.000602, 0.004330, 0.005700, 0.017120,
        0.233015, 0.034154, 0.244022, 0.007644, 0.385683, 0.042960, 0.406633, -0.007811, 0.346931, 0.040123, 0.387361, 0.007030, 0.225309, 0.017897, 0.241024, 0.003700,
        0.103601, 0.060748, 0.121059, -0.045041, 0.076974, 0.070647, 0.148810, -0.022399, 0.074007, 0.054797, 0.141794, 0.010376, 0.052482, 0.045013, 0.078443, -0.019940,
        -0.057353, 0.044285, 0.066622, -0.058232, -0.093817, 0.064753, 0.126611, -0.008286, -0.085634, 0.029582, 0.140443, 0.009189, -0.052974, 0.036057, 0.087536}},

        {{309.270569},
        {74.520226},
        {2.088673},
        {1.595730},
        {1},
        {-0.003261,
        0.001452, 0.006673, 0.007092, 0.001020, 0.002904, 0.009037, 0.009587, -0.001494, 0.000296, 0.009327, 0.010013, -0.000301, -0.002727, 0.005875, 0.008888, -0.016850,
        0.231185, 0.029758, 0.241629, 0.009411, 0.382748, 0.057553, 0.407984, -0.019496, 0.393691, 0.045355, 0.411033, -0.019787, 0.185746, 0.027101, 0.216863, 0.010189,
        0.050463, 0.041380, 0.059462, 0.009747, 0.093188, 0.089831, 0.132579, -0.049612, 0.058789, 0.075130, 0.122026, -0.022185, 0.017041, 0.035450, 0.074255, -0.002068,
        -0.061219, 0.040752, 0.087084, -0.013021, -0.106098, 0.066566, 0.140099, -0.041966, -0.073433, 0.055231, 0.125908, -0.003481, -0.050690, 0.017257, 0.085251}}};

采纳答案by mvds

You should remove the braces: {and }around single values.

您应该删除大括号:{}围绕单个值。

struct TECH lut_model_1[2] = {{296.001465,
        74.216972,
        2.025908,
        1.516384,
        1,
        {0.001746,
        0.000256, 0.006216, 0.005249, -0.001668, -0.001377, 0.009865, 0.010454, -0.000288, -0.005853, 0.010584, 0.015440, 0.000465, -0.000602, 0.004330, 0.005700, 0.017120,
        0.233015, 0.034154, 0.244022, 0.007644, 0.385683, 0.042960, 0.406633, -0.007811, 0.346931, 0.040123, 0.387361, 0.007030, 0.225309, 0.017897, 0.241024, 0.003700,
        0.103601, 0.060748, 0.121059, -0.045041, 0.076974, 0.070647, 0.148810, -0.022399, 0.074007, 0.054797, 0.141794, 0.010376, 0.052482, 0.045013, 0.078443, -0.019940,
        -0.057353, 0.044285, 0.066622, -0.058232, -0.093817, 0.064753, 0.126611, -0.008286, -0.085634, 0.029582, 0.140443, 0.009189, -0.052974, 0.036057, 0.087536}},

        {309.270569,
        74.520226,
        2.088673,
        1.595730,
        1,
        {-0.003261,
        0.001452, 0.006673, 0.007092, 0.001020, 0.002904, 0.009037, 0.009587, -0.001494, 0.000296, 0.009327, 0.010013, -0.000301, -0.002727, 0.005875, 0.008888, -0.016850,
        0.231185, 0.029758, 0.241629, 0.009411, 0.382748, 0.057553, 0.407984, -0.019496, 0.393691, 0.045355, 0.411033, -0.019787, 0.185746, 0.027101, 0.216863, 0.010189,
        0.050463, 0.041380, 0.059462, 0.009747, 0.093188, 0.089831, 0.132579, -0.049612, 0.058789, 0.075130, 0.122026, -0.022185, 0.017041, 0.035450, 0.074255, -0.002068,
        -0.061219, 0.040752, 0.087084, -0.013021, -0.106098, 0.066566, 0.140099, -0.041966, -0.073433, 0.055231, 0.125908, -0.003481, -0.050690, 0.017257, 0.085251}}};

will give no warning.

不会发出警告。

回答by AnT

In C language it is perfectly legal to use extra braces when initializing a scalar value, as in

在 C 语言中,初始化标量值时使用额外的大括号是完全合法的,如

int x = { 5 };

even though you won't normally see this in real-life code. In your case you are doing the same thing, except that in your case the scalar value is a member of a larger aggregate.

即使您通常不会在现实生活中的代码中看到这一点。在您的情况下,您正在做同样的事情,但在您的情况下,标量值是更大聚合的成员。

GCC generates warnings for code like that. It believes that it is possible that you wrote something you didn't intend to write, since braces are most of the time are used to start a multi-part initializer for an aggregate, not a standalone initializer for a scalar.

GCC 会为这样的代码生成警告。它认为你可能写了一些你不打算写的东西,因为大括号大部分时间用于启动聚合的多部分初始化器,而不是标量的独立初始化器。

<rant>GCC is definitely screwing things up with its warnings about braces in aggregate initializers. In C language the { 0 }has always been used as an idiomatic universal zero-initializer. At least { 0 }should have been made exempt from brace-related warnings for its idiomatic value.</rant>

<rant>GCC 肯定会在聚合初始值设定项中发出有关大括号的警告。在 C 语言中,{ 0 }一直被用作惯用的通用零初始值设定项。至少{ 0 }应该因其惯用价值而免于与大括号相关的警告。</rant>

回答by nmichaels

This is a scalar initializer: int foo = 3;
This is a scalar initializer with braces around it: int foo = {3};
This is an initializer of an array, which isn't scalar: int foo[] = {1, 2, 3};

这是一个标量初始化器:int foo = 3;
这是一个用大括号括起来的标量初始化器:int foo = {3};
这是一个数组的初始化器,它不是标量:int foo[] = {1, 2, 3};

The warning says that your struct has scalar initializers with braces around them:

警告说你的结构有标量初始值设定项,周围有大括号:

typedef struct TECH
{

    float velocity1, velocity2;
...

struct TECH lut_model_1[2] = {{{296.001465},
    {74.216972},
...

Your code will work, it just has superfluous braces around its scalar initializers. If you take the braces out and format it a little more nicely (I'd put the first initializer on its own line) there will be nothing objectionable about it.

你的代码会工作,它只是在它的标量初始值设定项周围有多余的大括号。如果你去掉大括号并更好地格式化它(我会把第一个初始化器放在它自己的行上),就不会有什么令人反感的了。

回答by jpalecek

This means you needn't put braces in places like:

这意味着您无需在以下位置放置大括号:

    {74.216972},

Basically, all the braces you have there are optional (except the outer ones), however, you will get a different warning for not embracing nested structs in the initializer. Basically, if you mind the warning, put braces around nested structs and arrays only; if not, use them to improve readability as you like.

基本上,您拥有的所有大括号都是可选的(外部大括号除外),但是,如果没有在初始化程序中包含嵌套结构,您将收到不同的警告。基本上,如果您介意警告,请仅在嵌套结构和数组周围放置大括号;如果没有,请根据需要使用它们来提高可读性。

回答by KeatsPeeks

You initialize scalar values (velocity1, temp, etc) by surrounding them with braces, which is not needed.

您可以通过用大括号将标量值(velocity1、temp 等)括起来来初始化它们,这不是必需的。

Try this:

尝试这个:

struct TECH lut_model_1[2] = {{296.001465,
        74.216972,
        2.025908,
        1.516384,
        1,
        {0.001746,
        0.000256, 0.006216, 0.005249, -0.001668, -0.001377, 0.009865, 0.010454, -0.000288, -0.005853, 0.010584, 0.015440, 0.000465, -0.000602, 0.004330, 0.005700, 0.017120,
        0.233015, 0.034154, 0.244022, 0.007644, 0.385683, 0.042960, 0.406633, -0.007811, 0.346931, 0.040123, 0.387361, 0.007030, 0.225309, 0.017897, 0.241024, 0.003700,
        0.103601, 0.060748, 0.121059, -0.045041, 0.076974, 0.070647, 0.148810, -0.022399, 0.074007, 0.054797, 0.141794, 0.010376, 0.052482, 0.045013, 0.078443, -0.019940,
        -0.057353, 0.044285, 0.066622, -0.058232, -0.093817, 0.064753, 0.126611, -0.008286, -0.085634, 0.029582, 0.140443, 0.009189, -0.052974, 0.036057, 0.087536}},

        {309.270569,
        74.520226,
        2.088673,
        1.595730,
        1,
        {-0.003261,
        0.001452, 0.006673, 0.007092, 0.001020, 0.002904, 0.009037, 0.009587, -0.001494, 0.000296, 0.009327, 0.010013, -0.000301, -0.002727, 0.005875, 0.008888, -0.016850,
        0.231185, 0.029758, 0.241629, 0.009411, 0.382748, 0.057553, 0.407984, -0.019496, 0.393691, 0.045355, 0.411033, -0.019787, 0.185746, 0.027101, 0.216863, 0.010189,
        0.050463, 0.041380, 0.059462, 0.009747, 0.093188, 0.089831, 0.132579, -0.049612, 0.058789, 0.075130, 0.122026, -0.022185, 0.017041, 0.035450, 0.074255, -0.002068,
        -0.061219, 0.040752, 0.087084, -0.013021, -0.106098, 0.066566, 0.140099, -0.041966, -0.073433, 0.055231, 0.125908, -0.003481, -0.050690, 0.017257, 0.085251}}};