Code/C, C++

malloc() 결과값의 캐스팅

Segel 2020. 11. 27. 20:44

stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc

 

Do I cast the result of malloc?

In this question, someone suggested in a comment that I should not cast the result of malloc, i.e. int *sieve = malloc(sizeof(int) * length); rather than: int *sieve = (int *) malloc(sizeof(int) *

stackoverflow.com

1. 캐스팅은 하지 않아야 한다

  • malloc() 함수를 사용하면서 실수로 <stdlib.h>헤더를 include 하지 않았을 때, malloc()의 결과값을 명시적으로 캐스팅했다면 오류를 숨기게 될 수 있다. (implicit function declaration)
  • void *형은 자동으로 안전하게 다른 포인터 타입으로 형변환될것이다.
  • 불필요한 캐스팅은 코드를 지저분하게 만든다. (답변자의 주관)
  • 이런 상황에서 캐스팅은 오류가 발생할 수 있는 행동을 불필요하게 반복하는 것이다.
  • 위의 내용은 C++가 아닌, C에 대한 것들이다.

 

2. 캐스팅은 필요하다

  • 캐스팅은 코드를 C/C++ 양쪽에서 접근하기 쉽게 만든다. (C++에서는 반드시 캐스팅해야한다)
  • 알맞은 헤더를 include하지 못할 수도 있다는 것은 캐스팅을 포기할 정도로 큰 문제가 아니다.
  • 캐스팅은 개발자가 오류를 알아차리는 데(특히 포인터를 선언한 부분이 malloc()함수를 호출한 부분과 멀리 떨어져 있을 때) 도움을 준다.
반응형

'Code > C, C++' 카테고리의 다른 글

scanf 대신 fread 사용 시 참고  (0) 2022.03.26
가위바위보  (0) 2021.11.21
VS2019 C/C++ IntelliSense 설정  (0) 2021.04.17