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
'programing' 카테고리의 다른 글
오류가 발생한 이유: 그룹 기능이 잘못 사용되었습니까? (0) | 2023.11.06 |
---|---|
가장 짧은 C 프로그램은 여전히 segfault를 유발합니다. (0) | 2023.11.06 |
MySQL로 .sql 파일을 가져오면 기존 db를 덮어쓰나요 아니면 추가하나요? (0) | 2023.11.06 |
조합 또는 가입 사용 - 더 빠른 것 (0) | 2023.11.06 |
PHP나 자바스크립트를 사용하지 않고 콘텐츠에 맞게 텍스트 영역을 확장할 수 있는 방법이 있습니까? (0) | 2023.11.06 |