2012-04-14 3 views
0
void* buffer = (void*)malloc(100); 

malloc() 함수 앞에 (void *)를 붙임으로써 반환 값의 형식을 재정의합니까?왜 malloc 앞에 (void *) 있습니까?

+8

이것은'malloc'이'void *'타입의 포인터를 반환한다는 것을 모르는 것을 의미합니다. –

+1

접두사가 아닌 * cast *입니다. btw. –

답변

4

호출의 반환 형식은 명시 적으로 void 포인터로 캐스팅되는 :에이 동일합니다. 이것은 이미 void*을 반환하기 때문에 일종의 중복이지만 개발자의 의도를 명확히하기 위해 (아마도 )이 존재할 수도 있습니다.

+2

"개발자의 의도를 분명히하기 위해 제시된 것입니다."그렇다면 개발자의 의도가 큰 실수입니다. 캐스트는 유형 시스템을 포기하는 효과가 있습니다. 일반 프로그래머들은 절대 캐스트를 사용할 수없는 것처럼 열심히 노력합니다. 가짜 불필요한 던지기를 추가하는 것은 믿음을 초월한 것입니다. –

+0

@DavidHeffernan 사실, 좋은 지적입니다. 나는 항상 의심의 이익을주기 위해 노력하지만, 그럼에도 불구하고 나의 반응을 편집했습니다. –

6

malloc이 이미 void 포인터를 반환하기 때문에 아무 것도 달성되지 않습니다. malloc

void* buffer = malloc(100); 
+0

신속한 답변을 보내 주셔서 감사합니다. 그 접두사는 무엇을합니까? – jwbensley

+1

아무 것도하지 않으며 제거 할 수 있으며 코드는 동일합니다. –

+0

지금 얻었습니다. 건배 : D – jwbensley

4

이 특별한 경우에는 아무 것도 수행하지 않습니다. 당신은 C++을 사용하기 때문에, 당신은 new를 사용해야하는 당신에게 말할 수 없다, 그러나

void* x = malloc(100);  //OK in C/C++ 
int* y = malloc(100);  //OK in C, error in C++ 
int* z = (int*)malloc(100); //OK in C/C++, not recommended for C 

: C++ 유형의 안전에 대한 훨씬 더 엄격한 C 이상이기 때문에, 당신은 일반적으로 malloc의 반환을 캐스팅 할 필요가 대신.

+0

휴식 주셔서 감사합니다. D – jwbensley