void* buffer = (void*)malloc(100);
malloc() 함수 앞에 (void *)를 붙임으로써 반환 값의 형식을 재정의합니까?왜 malloc 앞에 (void *) 있습니까?
void* buffer = (void*)malloc(100);
malloc() 함수 앞에 (void *)를 붙임으로써 반환 값의 형식을 재정의합니까?왜 malloc 앞에 (void *) 있습니까?
호출의 반환 형식은 명시 적으로 void
포인터로 캐스팅되는 :에이 동일합니다. 이것은 이미 void*
을 반환하기 때문에 일종의 중복이지만 개발자의 의도를 명확히하기 위해
(아마도
)이 존재할 수도 있습니다.
"개발자의 의도를 분명히하기 위해 제시된 것입니다."그렇다면 개발자의 의도가 큰 실수입니다. 캐스트는 유형 시스템을 포기하는 효과가 있습니다. 일반 프로그래머들은 절대 캐스트를 사용할 수없는 것처럼 열심히 노력합니다. 가짜 불필요한 던지기를 추가하는 것은 믿음을 초월한 것입니다. –
@DavidHeffernan 사실, 좋은 지적입니다. 나는 항상 의심의 이익을주기 위해 노력하지만, 그럼에도 불구하고 나의 반응을 편집했습니다. –
이 특별한 경우에는 아무 것도 수행하지 않습니다. 당신은 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
의 반환을 캐스팅 할 필요가 대신.
휴식 주셔서 감사합니다. D – jwbensley
이것은'malloc'이'void *'타입의 포인터를 반환한다는 것을 모르는 것을 의미합니다. –
접두사가 아닌 * cast *입니다. btw. –