Re: malloc에 관하여
, 도장_ 관리자님이 작성포럼 상단 오른쪽에 malloc으로 검색하면 이전 질문과 답변을 참조할 수 있습니다.
포럼 상단 고정에는
공지가 있습니다.
C와 C++는 메모리 모델이 다릅니다.
C++는 malloc 할당에 명시적인 형변환이 필요하고
C는 필요하지 않습니다. C 표준은 형변환을 하지 않는 것을 권장합니다.
형변환은 문제가 될 수 있는 경고나 오류를 강제로 감추는 것에 해당하기 때문에 권장하지 않습니다.
다만, 과거부터 C 표준을 잘 모르는 상태에서 malloc을 할 때 형변환을 해야 하는 것으로 배운 사람들, 그렇게 배웠기 때문에 그렇게 가르치는 사람들 때문에 나쁜 악습이 쉽게 사라지지 않고 있습니다.
Visual Studio에서 확장자가 .cpp이면 C++로 컴파일하기 때문에 malloc에 형변환이 필요하다는 경고를 하게 됩니다. 확장자를 .c로 해야 합니다. 그러면 경고가 표시되지 않습니다. 문법은 비슷하지만, 내부는 많이 다릅니다. 대표적으로 메모리 모델이 다르고, 형변환을 이용하는 케이스도 다릅니다.
C++가 아닌 C에서 malloc을 할 때 형변환을 쓰는 예제가 있다면 해당 책은 잘못된 C 언어를 가르치고 있을 확률이 매우 큽니다.