( 구조체에 관한 메모리할당 )에 대한 C와 C++의 차이

조회수 1075회

안녕하세요. 컴공2학년2학기 복학 준비 중인 방금 막 전역한 예비역입니다.

자료구조책을 보며 리스트 예제를 따라 작성하다 궁금증이 생겼습니다.

책이 객체지향을 설명하기 위해 모든 예제를 C++로 작성해놨는데,

제가 C++은 공부를 안 해보기도 했고, 구글갓에 여쭤보아도 못 찾겠어서 이렇게 질문을 드립니다~!



#include <stdlib.h>

typedef struct nodeRecord {
    int Data;
    struct nodeRecord* Next;
}node;

typedef node* Nptr;

Nptr p = (node*)malloc(sizeof(node));

p->Data = 33;


위 소스코드에 관해 궁금증 3가지가 생겼습니다.


  1. Nptr p = (node*)malloc(sizeof(node));에 대해 확장자를 cpp에서 c로 바꾸었을 때 "저장소 클래스 또는 형식 지정자가 없습니다" 라는 컴파일오류가 안 나는 이유가 무엇일까요?

  2. p->Data = 33;에 대해서는 확장자가 c이건 cpp이건 "저장소 클래스 또는 형식 지정자가 없습니다"라는 컴파일오류가 나는 이유는 무엇일까요?

  3. C컴파일러에서는 그저 메모리 할당만 해주면 끝났지만 C++컴파일러에서는 형변환을 해주어야하는 이유는 무엇일까요?


누군가에겐 기본적인 질문이시겠지만 기본적인 질문이든, 심오한 질문이든

무엇이든지 궁금해하는 자세로 있음이 중요하다고 생각합니다.

열심히 구글링하면서 찾아가며 답변을 기다리겠습니다!

감사합니다~!

2 답변

  • 좋아요

    2

    싫어요
    채택 취소하기

    1번2번. 설마 저 코드를 저대로 돌리신 건가요? 저대로 돌리면 main 함수가 없기 때문에 에러가 납니다. 아래와 같이 메인 함수 안에서 변수를 선언하고, 변수에 접근하면, c와 c++에서 모두 아무 문제가 없이 실행됩니다.

    #include <stdlib.h>
    
    typedef struct nodeRecord {
        int Data;
        struct nodeRecord* Next;
    }node;
    
    typedef node* Nptr;
    
    
    int main()
    {
        Nptr p = (node*)malloc(sizeof(node));
    
        p->Data = 33;
    
        return 0;
    }
    

    3번. 설계 관점에서 c는 심플한 것이 특징이고, c++ 언어는 실행시간 에러 발생을 최소한 한 것이 특징입니다. 그래서 c++에서는 묵시적인 형변환을 기본 컴파일 옵션에서 에러로 간주합니다. 따라서 특별히 컴파일 옵션을 손보지 않는다면 형변환을 해주어야 하고요. c의 경우에는 그냥 심플하게 형변환을 받아 들입니다. 어느 한쪽이 좋다기 보단 보는 관점에 따라서 장단점이 있는 겁니다.

    조언 한가지만 하겠습니다. 기분 나쁘지 않았으면 좋겠네요. 질문에 있는것처럼 c++을 안배우고 c++로 된 자료구조를 보는 것은 순서가 잘못된 것 같아요. c는 문법 자체가 적어서 배우는데 얼마 안걸리지만, C++은 c보다 배울게 몇배 더 많습니다. c는 배운적이 있는것 같아 보이니 c로 된 자료구조 책을 공부하시거나(예를 들어 윤성우씨의 자료구조), 아니면 c++문법책을 최소한 한권 본 후에 c++로 된 자료구조를 공부하시길 추천합니다.

    힘내세요.

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • main()도 없이 저러고 있었다니..

    제정신이었을까요...(•_•);;

    처음 배우는 사람도 안 할 것 같은 실수를 하는 저를 보게 되니

    아직도 코드작성에 있어 미숙하다는 걸 뼈저리게 느끼게 되네요

    C++로 공부하지 말고 우선 자료구조 공부를 위해 C로 된 책으로 보라는 말씀 정말 감사드립니다.

    제 주변에 이렇다 저렇다 조언을 해주실 수 있는 분이 없어서

    이런 진심어린 말씀 한 마디가 소중하네요

    긴 글 읽어주시고 장문의 답변과 진지한 조언해주셔서 감사합니다.

    좋은 하루되세요~! ^

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)