programing

구조물을 직접 할당할 수 없는 이유는 무엇입니까?

powerit 2023. 10. 20. 14:52
반응형

구조물을 직접 할당할 수 없는 이유는 무엇입니까?

태그가 있는 완전한 구조가 있다고 가정합니다.MyStruct, 라고 가정해 보겠습니다.x, y, ..., z필드에 허용되는 값입니다.왜가.

struct MyStruct q = {x,y,..,z};

허용되긴 하지만

struct MyStruct q;
q = {x,y,...,z};

안되나요?저는 이게 굉장히 짜증나쁘다고 생각합니다.두 번째 경우는, 제가 앞서 선언한 바와 같이q, 각 필드에 하나씩 값을 할당해야 합니다.

q.X = x; q.Y = y; ... q.Z = z;

어디에X, Y, ..., Z의 분야입니다.MyStruct. 이게 무슨 이유가 있는 겁니까?

당신이 찾고 있는 것은 복합적인 문자입니다.이것은 C99에서 언어에 추가되었습니다.

첫 번째 사례:

struct MyStruct q = {x,y,..,z};

는 초기화에 특화된 구문입니다.두번째 경우는, 언어의 소아성애에서 초기화가 아니라 과제입니다.과제의 오른쪽은 올바른 유형의 구조여야 합니다.C99 이전에는 언어에 구조 리터럴을 쓰는 구문이 없었는데, 이것이 당신이 하려는 것입니다.{x,y,...,z}은(는) 안에 표정이 있는 블록처럼 보였습니다.만약 어떤 사람이 그것을 문자적 가치로 생각하도록 영감을 받았다면, 비록 언어가 그렇지 않았지만, 그것의 종류를 확신할 수 없었습니다.(당신의 상황에서 당신은 좋은 추측을 할 수 있을 것입니다.

이를 허용하고 유형 문제를 해결하기 위해 C99는 다음과 같이 쓸 수 있도록 구문을 추가했습니다.

q = (struct MyStruct){x,y,...,z};

이렇게 할 수 있지만 Aggregate 이전에 구조 유형을 제공해야 합니다.

struct MyStruct q;
q = (struct MyStruct){x,y,...,z};

언급URL : https://stackoverflow.com/questions/12189480/why-structs-cannot-be-assigned-directly

반응형