programing

Quickest way to initialize an array of structures to all-0's?

newsource 2023. 11. 6. 21:52

Quickest way to initialize an array of structures to all-0's?

I'm trying to initialize an array of structures to all-0's, using the below syntax:

STRUCTA array[MAX] = {0};

However, I'm getting the following warning from gcc :

warning: missing braces around initializer

What am i doing wrong - is there another/better way to do this ?

It the first member of your struct has a scalar type, use

STRUCTA array[MAX] = {{ 0 }};

If the first member of your struct happens to be another struct object, whose first member has scalar type, then you'll have to use

STRUCTA array[MAX] = {{{ 0 }}};

등등.기본적으로 새 수준의 중첩을 열어야 합니다.{}다른 중첩 집합체(구조체 또는 배열)를 "입력"할 때마다.따라서 이 경우 각 중첩 애그리게이트의 첫 번째 멤버도 애그리게이트인 한, 다음과 같은 작업을 수행해야 합니다.{}.

이 모든 여분의 교정기들은 경고를 피하기 위해 거기에 있을 뿐입니다.물론, 이것은 (이 특정한 경우에는) 무해한 경고일 뿐입니다.심플하게 사용하시면 됩니다.{ 0 }효과가 있을 겁니다

아마도 이 문제를 해결하는 가장 좋은 방법은 이 경고를 완전히 비활성화하는 것입니다(오른쪽 명령줄 옵션은 @pmg의 답변 참조).GCC에서 일하는 누군가가 명확하게 생각하지 않았습니다.제 말은, 저는 그 경고의 가치를 이해하지만(그리고 그것은 정말로 매우 유용할 수 있습니다), 기능을 깨뜨립니다.{ 0 }허용할 수 없습니다.{ 0 }특별한 치료를 받았어야 했어요

gcc는 성가신 존재입니다.그것은 경고 없이 받아들여야 합니다.
이거 먹어봐요.

STRUCTA array[MAX] = {{0}};

gcc 동작은 옵션을 사용하여 제어할 수 있습니다.-Wmissing-braces아니면-Wno-missing-braces.

-Wall이 경고를 가능하게 합니다.-Wall교정기가 없어져서는 안됩니다.-Wall -Wno-missing-braces

이것은 단지 gcc에서 발행하는 유해한 경고이며, 나는 그것을 비활성화 할 것입니다.-Wno-braces.{0}코드의 정의가 인식되지 않아야 하는 유형에 매우 유용한 "유니버설 제로 이니셜라이저"이며, gcc의 사용을 억제하는 것은 좋은 코드를 추구하는 데 적극적으로 해롭습니다.

gcc가 이 경고를 유지하려면 최소한 특수한 경우에 해당해야 합니다.{0}이 경우 경고를 비활성화합니다.

You can avoid the warning by using completely empty braces:

STRUCTA array[10] = {};

The array will be aggregate-initialized, which means that each of the structs in it will in turn be value-initialized. Value-initialization with empty brackets turns into aggregate-initializion of each struct, which sets all fields to 0, which is what you want.

이 방법은 구조물이 POD인 경우에는 모든 경우에 적용됩니다(자세한 설명은 위 링크 참조).

배열은 브레이스로 초기화되지만 구조물도 마찬가지입니다.당신은 아마도 당신의 0 주위에 추가적인 치아 교정기를 설치할 필요가 있을 것입니다. 그리고 방법에 따라서.STRUCTA정의됩니다. 일부 여분의 0은 쉼표로 구분됩니다.

STROCTA에 따라 다릅니다.예를 들어 다음과 같습니다.

typedef struct structa 
{
    int a, b;
} STRUCTA;

int main (int argc, char const* argv[])
{
    STRUCTA array[10] = {{0,0}};
    return 0;
}

STROCTA는 0에 할당할 수 있습니까?

언제든지 memset()을 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/5434865/quickest-way-to-initialize-an-array-of-structures-to-all-0s