을 입력하면 다음 매크로 offsetof
이 있습니다. 아무도 그것이 무엇을하는지 말해 줄 수 있습니까?다음 매크로는 무엇을 수행합니까? qemu 소스 코드에서
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER)
그것은 이러한 방식으로 사용되는 : CPUState이 구조체이다
offsetof(CPUState, icount_decr.u32)
.
구조체 내부의 멤버 오프셋을 제공한다고 생각하지만 확실하지 않습니다.
편집 : 그래, 무슨 일이 일어 났는지 알아 냈어. CPUState의 정의에는 icount_decr 변수가 포함 된 매크로가 있습니다.
http://en.wikipedia.org/wiki/Offsetof –
매크로는 기술적으로 정의되지 않은 동작을 트리거하지만 많은 곳에서 작동합니다. 현대적인 (예 : GCC 4)''은 컴파일러가 정의되지 않은 것을 피하기 위해 컴파일러에 정의 할 것이며 C++의 두통을 피할 것입니다. –
zwol
@Zack : 대답에 대해 말했듯이, 그것은 라이브러리 기능이기 때문에, 정의되지 않은 동작이 아닙니다. 구현은 원하는대로 구현할 수 있습니다. (본질적으로,이 특정 구현은 역 참조 된 널 포인터의 주소를 특정 컴파일러에 맞게 잘 정의해야합니다.) – GManNickG