2011-03-20 3 views

답변

1

오른쪽 헤더가 포함되어있는 한 intsbrk()으로 전달되지 않습니다. 전달하는 값은 C 판촉 규칙에 따라 intptr_t으로 변환됩니다. 이 규칙은 끔찍하게 미묘하기 때문에 적어도 존재한다는 것을 알고 있어야하며 모서리의 경우에 호출하지 않아야합니다. 결과적으로

, 당신은 int처럼 보이는 sbrk 뭔가, 심지어 intptr_t 경우를 통과 할 때 제공하는 헤더만큼 플랫폼, int에서 다른, 같은 충돌로 멋진 뭔가를 기대하지 않습니다 sbrk()의 프로토 타입은입니다.

+0

그래서 sbrk()에 'int'를 전달하면이 값을 저장하고 int 위치에 intptr_t를 전달합니까? – Bob

+0

@Bob 아니요, 프로모션 규칙은이 작업을 수행하지 않습니다. 또한'intptr_t'는 정수형이며'int'와 항상 같지는 않습니다. –

6

intptr_t 변화의 크기는 일반 C.입니다. int은 아키텍처에 따라 크기가 변경되거나 변경되지 않을 수 있습니다. 즉, 64 비트를 사용하는 경우 intptr_t은 64 비트이어야하며, int일 수 있습니다.은 32 비트입니다.

+0

intptr_t는 포인터가 아니며 실제 값이 아닙니다. 따라서 sbrk()에서 intptr_t를 참조 해제하는 반면, int를 전달하면 역 참조가 필요하지 않습니다. – Bob

+0

@Bob'intptr_t'는 정수형입니다. 포인터의 모든 비트를 포함 할 수있는 가장 작은 정수형입니다. –

+0

오 그 말이 틀림 없어! 웬일인지 나는 그것이 포인터 다라고 생각했다. 해명에 감사드립니다. "포인터의 모든 비트"의 의미는 무엇입니까? 포인터가 필요한 비트가 변경되고 intptr_t의 크기가 변경됩니다. – Bob

관련 문제