int* numPtr2; // int형 포인터 선언 numPtr2 = malloc(sizeof(int)); // int의 크기 4바이트만큼 동적 메모리 할당위의 문법과 아래 문법을 비교해보았습니다.
int* numPtr2; // int형 포인터 선언 numPtr2 = (int*)malloc(sizeof(int)); // int의 크기 4바이트만큼 동적 메모리 할당
다른 교재와 같이 공부중인데 코딩도장의 강의와는 다르게 아래 문법을 사용하는 건 어떻게 다른건가요? malloc 앞에 반드시 (int*) 캐스팅을 해주어야 하는 건가요?
굳이 안해주어도 된다면 안하는게 맞다고 생각합니다만..
아래는 잘못된 문법입니다.
C 언어에서는 malloc 다음에 형변환을 하지 않습니다.
반드시 형변환을 해야 하는 언어는 C++입니다. C와 C++는 다릅니다.
Visual Studio에서 확장자를 .cpp로 쓰면 C++ 문법으로 검사하기 때문에 malloc에 형변환을 하지 않으면 경고가 표시됩니다. 이럴 때 형변환을 하면 경고가 사라지고 문제가 해결된 것으로 착각하는 사람들이 있습니다. 이는 C 언어 표준을 정확하게 모르기 때문에 벌어지는 착각입니다.
잘못 이해해서 잘못 쓰여진 교재가 많습니다. malloc 하나만 잘못 설명되어 있지 않을 수 있지요. C 언어 표준을 모르면 i++ + ++i의 결과는? 이라는 질문을 하는 책이 나옵니다. 이는 시퀀스 포인트 위반입니다.
를 참고하세요.
전체 학습하면 다 배웁니다. 현업 면접에서는 시퀀스 포인트를 이해하고 있는지 묻는데, i++ + ++i는 컴파일러마다 결과가 다르고, 정의되지 않은 동작(Undefined Behavior, UB)입니다. 이걸 진지하게 가르치고 설명하는 책이 시중에는 많이 있습니다.
혹시 C언어에서의 최신 표준이 C99 를 칭하는 건가요?
생각했던 것보다 C와 C++ 많이 다르다는 걸 알게되면서 의아해지네요..
거의 같은 언어라고 생각해왔습니다.. 공부할게 너무 많네요
ANSI C 표준은 다음 링크를 참조하세요.
https://ko.wikipedia.org/wiki/ANSI_C
보통은 C99까지를 많이 사용합니다.
환경에 따라 C89/90을 사용하지만, 크로스 플랫폼 스레드 지원 등을 위해서는 C11을 사용하기도 합니다. 환경에 따라 다를 것입니다.
C18까지 있지만, C18까지는 거의 쓰지 않고, 보통은 C99라고 생각하면 됩니다.
다른 분이 쓰신 글을 참고하시면 좋을 것 같습니다.
C언어를 제대로 배우지 못했다는 것은 구체적으로 어떤 것을 말하는 것일까? 아래 질문에 답을 하거나 개념이라도 확실히 알고 있다면 C언어를 제대로 배운 것이고 아니라면 기초가 부실하거나 잘못 배운 것이다. (아래 질문들의 절반도 모르겠다면 C언어를 제대로 배운 것이라고 할 수 없다)
질문0. C언어는 언제, 어디서, 누가, 무엇을 위해 만들었는가?
질문1. C언어 국제표준(ISO/IEC 9899)은 무엇이며 C99, C11은 무엇인가?
질문2. C언어의 stdio(표준입출력)는 왜 만들어졌는가?
질문3. 전처리기(preprocessor)가 하는 일은 무엇인가? 그리고 왜 만들어졌는가?
질문4. long, int, short, pointer 변수의 크기는 몇 bit인가? (이들 크기는 고정 사이즈가 아님. int는 32bit라고 단정하면 틀린 거다)
질문5. API와 ABI는 무엇인가?
질문6. 오브젝트(object)란 무엇인가? (객체지향의 오브젝트를 말하는 것이 아님)
질문7. 링커(linker)가 하는 일은 무엇인가?
질문8. call-by-reference, call-by-value란 무엇인가? (C에 왜 call-by-reference가 없는지 설명할 수 있어야 함)
질문9. C언어의 main 함수의 return 값은 왜 int 인가? (void main()으로 선언하면 왜 틀리는가?)
질문10. C언어와 C++은 다른 하나가 부분집합인 서브셋인가? 아니면 둘은 다른 언어인가?
질문11. 하드웨어 제어에 C언어가 사용되는 이유는 무엇인가?
질문12. 시퀀스 포인트(sequence point)가 무엇인가?
질문13. Side effect란 무엇인가?
질문14. UB(Undefined behavior)란 무엇인가?https://sunyzero.tistory.com/225