첫 번째 요소가 아닌 구조체입니다 구조체입니다 자체에 주소를 사용하는 이유는?

39, ve 그냥 일하고 있는 또 다른 코드를 기반으로 i& 희들에게 개발자들이 복사 / 주소 / 설정 비교할 때 첫 번째 요소에 적용하십시오 구조체 구조체입니다 아닌 것이다. # 39 의 here& 간단한 예를.

S # 39, 첫 번째 there& 구조체입니다 유형:

typedef struct {
    int a;
    int b;
} foo_t;

이로써 복제본에 어졌다면 there& # 39 의 기능 등 구조체입니다:

void bar(foo_t *inp)
{
    foo_t l;
    ...
    memcpy(&l.a, &inp->a, sizeof(foo_t));
    ...
}

39, 내가 내 자신을 wouldn& 메맥피 '에서' t call to 쓰기 시작한 것은 단순히 didn& 이쪽요 쉐퍼드도 out with t, 상당히 의심이 든다고 초기 개발자 # 39 에서 c # 39, ve seen I& 잡고 포인터 및 구조체 하지만 이제는 이 두 가지 점에서 일반적인 개발자는 연관해제된 코드 기반을 I& 의심할 수 없는, 그래서 시작 # 39 m 있어요.

왜 한 want to use this 스타일입니까?

질문에 대한 의견 (6)
해결책

아니예 어떻게해야합니다 iqn. 재정렬할 경우 구조체입니다 멤버 틀렸다니까 곤경에 빠졌다.

해설 (0)

아닌.

memcpy(&l.a, &inp->a, sizeof(foo_t));

그렇게 할 수 있습니다.

memcpy(&l, inp, sizeof(foo_t));

모두 같은 일을 할 수 있지만, 실제로 위험하고 잘못된 제표를 캜 하면 다음과 같은 구조를 전에 없는 패딩 첫 번째 멤버.

하지만 이제 막 가장 간단한 구조를 사용하여 객체를 복사하는 대입 연산자입니다:

l = *inp;
  • 왜 원-부트 want to use this 스타일입니까? *

내 생각엔. 무지나 나쁜거라 있기 때문입니다.

해설 (2)

39 한 wouldn&, t. 판매업체에서 이동할 경우 'a' 의 멤버 (s) 또는 구조체입니다 삽입한 후 메모리 스매싱 버그 소개하십시오 됩니다.

해설 (0)

이 코드는 때문에 메맥피 구조체입니다 멤버가 재정돈 안전하지 않은 결과를 가져올 수 있습니다 '' 의 멤버 'a' 는 더 이상 구조체입니다 넘어 액세스하면 니며 경우 첫 번째 멤버.

그러나 it& # 39 의 멤버가 가능성도 있다는 것이다, 그 중 일부입니까 복제본에 내의 오더할 의도적으로 구조체입니다 및 프로그래머용 디렉토리에만 시작 멤버 'a', '를 통해 끝날 때까지 구조체입니다. # 39 의 경우 다음 코드를 만들 수 있는 안전한 that& 경우 다음 변경:

    memcpy(&l.a, &inp->a, sizeof(foo_t) - offsetof(foo_t, a));

현재 멤버 '로' 결코 있을 수 있으며, 이 모든 구조체입니다 주문하십시오 메맥피 검색하기를 니며 아웃해야 주었다.

해설 (0)

39 의 it& 정말 나쁜 버릇이 생겼다. 예를 들어, 또 다른 멤버인 앞에 붙인 이 구조체입니다 있을 수 있습니다. 이것은 누구나 읽을 수 있는 게 습관이 부주의한 내가 이렇게 미친듯이 깜짝 놀라게 했다.

이미 이러한 다른 지적했다. 그 어느 날 버그를 로만스였나:

struct Foo rgFoo [3];
struct Foo *pfoo = &rgFoo [0];

대신

struct Foo *pfoo = rgfoo;

왜 이 어레이에는 인덱스화할 데레프 의해 다음 시행하십시오 주소 다시? # 39 의 it& 이미 주소, 다만 기술적으로 에로남이네 프로 메모

struct Foo *const, 

없습니다.

struct Foo *.  

아직 내가 사용한 첫 번째 항상 볼 수 있습니다.

해설 (0)

실제로 한 것은 정당한 览侩 荤례 엔드입니다: 바른 클래스 계층.

구조체 다룰 때 클래스로 인스턴스에서는 첫 번째 구성원, 즉 오프셋된 0) 는 일반적으로 포지셔닝합니다 상위 유형 인스턴스입니다. 수퍼 유형의 경우 존재합니다. 따라서 간단한 캐스트 이동합니까 사용 간에 하위형식 vs. 이 상위 유형. 매우 유용합니다.

39 의 대런 Stone&, s 는 C 에 대한 참고 걱정했던것 실행할 때, 이 OO 욕금지 의사를 밝혔다.

아니, 차라리 다른 case_ 제안하세요 _in 피하는 대신 직접 구성원 등을 이유로 이 패턴과 액세스하면 이미 언급했다.

해설 (0)