조건문 내부의 구조체 변수를 전체적으로 평가하여 각 요소를 작성할 필요가 없도록하는 방법이 있습니까? 예를 들어 다음 구조체가 주어집니다.
typdef struct
{
int a;
int b;
int c;
} number;
number foo = {1, 2, 3};
다음과 같은 if 문에서 요소를 평가하고 싶습니다.
if (foo.a == 1 && foo.b == 2 && foo.c == 3)
{
...
}
그러나 개별 요소를 나열하지 않고 전체 구조체를 평가하고 싶습니다. 나는 이것이 정확하지 않다는 것을 알고 있지만 이것은 내가 이루고 싶은 일을 따른 것입니다.
if (foo == {1, 2, 3})
{
...
}
귀하의 도움에 감사드립니다. 감사.
복합 리터럴을 통해 임시 구조체를 나타낼 수 있습니다.
(number) { 1, 2, 3 }
그래서 더 논리적 인 시도는 다음과 같이 보일 것입니다.
if (foo == (number) { 1, 2, 3 })
...
그러나 C 언어는 구조체 객체 비교를위한 내장 연산자를 제공하지 않기 때문에 작동하지 않습니다. memcmp
대신 사용할 수 있습니다.
if (memcmp(&foo, &(number) { 1, 2, 3 }, sizeof foo) == 0)
...
하지만 안타깝게도 구조체 객체가 포함 할 수있는 패딩 바이트의 내용을 예측할 수 없기 때문에 작동하지 않을 수 있습니다.
이 경우 가장 좋은 방법은 비교 함수를 수동으로 작성하는 것입니다.
inline bool is_same_number(const number *lhs, const number *rhs)
{
return lhs->a == rhs->a && lhs->b == rhs->b && lhs->c == rhs->c;
}
그런 다음 복합 리터럴 기능과 함께 사용하십시오.
if (is_same_number(&foo, &(number) { 1, 2, 3 }))
...
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다