문제

나는 오랜 시간 C 프로그래머이지만 최근에 memcpy를 사용하는 대신 구조 변수를 직접 할당 할 수 있다는 것을 알게되었습니다.

struct MyStruct a,b;
...
a = b; /* implicit memcpy */

이것은 C에게 약간의 "높은 수준"이라고 느끼지만 확실히 유용합니다. 그러나 왜 평등과 불평등 비교를 할 수없는 이유 :

if (a == b) ...
if (a != b) ...

표준이 이것을 배제해야할만한 이유가 있습니까? 아니면 이것이 매우 우아한 표준에서 불일치입니까?

나는 왜 내 Memcpy를 깨끗한 과제로 대체 할 수 있는지 모르겠지만, 그 추악한 memcmp를 제자리에 두어야합니다.

도움이 되었습니까?

해결책

comp.lang.c faq:

컴파일러가 C의 저수준 향미와 일치하는 구조 비교 (즉, 구조의 == 조작자를 지원하기위한)를 구현하는 좋은 방법은 없습니다. 간단한 바이트 별 비교는 구조에서 사용되지 않은 "구멍"에 존재하는 임의의 비트에 설립 될 수 있습니다 (이러한 패딩은 이후 필드의 정렬을 올바르게 유지하는 데 사용됩니다). 필드 별 비교는 큰 구조에 대해 용납 할 수없는 양의 반복 코드가 필요할 수 있습니다. 모든 경우에 컴파일러 생성 비교는 모든 경우에 포인터 필드를 적절하게 비교할 것으로 예상 될 수 없습니다. 예를 들어, char * 필드를 ==가 아닌 strcmp와 비교하는 것이 종종 적절합니다.

두 가지 구조를 비교 해야하는 경우 필드 별 필드 (Field)의 기능을 작성해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top