programing

gcc warning: 스칼라 이니셜라이저 주위에 대괄호가 있음

lovejava 2023. 10. 1. 19:01

gcc warning: 스칼라 이니셜라이저 주위에 대괄호가 있음

저는 아래에 정의된 룩업테이블을 가지고 있으며 GCC를 사용하고 있습니다.컴파일할 때 다음과 같은 경고가 표시됩니다.

warning: braces around scalar initializer

이 경고의 의미는 무엇입니까?이 LUT를 어떻게 초기화해야 합니까?제가 이 구조물을 초기화하는 것을 잘못하고 있습니까?

도와주세요!!


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}}};

교정기를 탈거해야 합니다.{그리고.}하나의 값을 중심으로

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}}};

아무런 경고도 주지 않을 겁니다

C 언어에서는 스칼라 값을 초기화할 때 여분의 가새를 사용하는 것이 완벽하게 합법적입니다.

int x = { 5 };

실제 코드에서는 잘 안 보이는데도 말입니다당신의 경우 스칼라 값이 더 큰 집합체의 멤버인 것을 제외하고는 동일한 작업을 수행하고 있습니다.

GCC는 그런 코드에 대해 경고를 생성합니다.가새는 스칼라의 독립 실행형 초기화기가 아니라 애그리게이트의 다중 부분 초기화기를 시작하는 데 대부분 사용되기 때문에 사용자가 의도하지 않은 내용을 작성했을 가능성이 있다고 판단됩니다.

<rant>GCC는 집계 초기화 장치의 교정장치에 대한 경고로 상황을 확실히 망치고 있습니다.C언어로 더{ 0 }는 관용적인 범용 제로 initial라이저로 항상 사용되어 왔습니다.적어도{ 0 }관용적인 가치 때문에 보조기 관련 경고를 면제했어야 합니다.</rant>

스칼라 이니셜라이저입니다.int foo = 3;
이것은 그 주위에 가새가 있는 스칼라 이니셜라이저입니다.int foo = {3};
이것은 배열의 초기화기이며 스칼라가 아닙니다.int foo[] = {1, 2, 3};

경고에 따르면 구조물에는 가새가 있는 스칼라 이니셜라이저가 있습니다.

typedef struct TECH
{

    float velocity1, velocity2;
...

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

당신의 코드는 작동할 것입니다. 스칼라 이니셜라이저 주변에 불필요한 가새만.교정기를 빼고 좀 더 예쁘게 포맷을 해주시면(첫 번째 이니셜라이저는 독자적인 라인에 넣겠습니다) 거부감이 없을 것입니다.

이는 교정기를 다음과 같은 곳에 설치할 필요가 없음을 의미합니다.

    {74.216972},

기본적으로 사용하는 가새는 모두 선택사항이지만(외부 가새는 제외), 초기화기에 중첩 구조물을 포함하지 않으면 다른 경고가 표시됩니다.기본적으로 경고가 신경 쓰이면 중첩된 구조물과 배열 주위에만 브레이스를 설치하고, 그렇지 않은 경우에는 원하는 대로 가독성을 향상시키기 위해 브레이스를 사용합니다.

스칼라 값(속도1, 온도 등)을 필요 없는 가새로 둘러싸서 초기화합니다.

시도해 보기:

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}}};

언급URL : https://stackoverflow.com/questions/3462513/gcc-warning-braces-around-scalar-initializer