본문 바로가기

Programming/C & C++

C 와 C++에서 구조체 정의의 차이점


C 와 C++에서 구조체 정의의 차이점 

typedef struct {

         int data;

         int text;

} S1;//  S1을 자료구조(typedef) 구조체로 정의한다. 

C와 C++에서 사용가능하다.


struct S2 {

         int data;

         int text;

};// S2를 자료구조(typedef) 구조체로 정의한다. 

이것은 C++에서만 사용하며, C에서는 에러가 발생한다.


위의 S1, S2의 방식으로 자료구조형으로 구조체를 정의한 경우 다음과 같이 변수를 선언해 줘야 한다.


struct S1 AAA;

struct S1 BBB, CCC;

struct {

         int data;

         int text;

} S3;// 구조체 변수 S3를 선언한다.

// S3는 위의 S1, S2와는 완전히 다르다.

// S3는 자료구조(typedef)로 정의하는 것이 아니고 변수를 정의하는 것이며, 위의 S1, S2는  자료구조(typedef)로 정의한다.

// 이것은 구조체 변수 S3를 위해서 메모리를 할당하라고 컴파일러에게 전달한다.


void main(){

        S1 mine1; // S1는 자료구조(typedef)로서 작동한다.

        S2 mine2; // S2 또한 자료구조(typedef)로서 작동한다.

        S3 mine3; // S3는 자료구조가 아니다.

        S1.data = 5;  // 이렇게 정의할 경우 에러가 발생한다. S1은 자료구조로만 정의 되었기 때문이다.

        S2.data = 5;  // 이것 또한 에러가 발생한다. S2도 자료구조로만 정의 되었기 때문이다.

        S3.data = 5;  // S3는 변수로 정의 되었기 때문에 정상적으로 작동한다.

}


또한 !!!!!!!!!!! 다음의 예는 linked list를 사용하길 원한다면 매우 중요하다.

struct S6 {

        S6* ptr;

};// 위의 방식은 C++ 에서만 작동한다.


typedef struct {

        S7* ptr;

} S7;// C, C++에서 둘다 작동할 것이라 착각할 수도 있다.


// C와 C++ 둘다에서 작동하지 않는다. !!!

'Programming > C & C++' 카테고리의 다른 글

C99, C11에서 변경된 점  (0) 2017.10.23
ssize_t, size_t 그리고 pid_t  (0) 2017.10.22
Application development on AIX  (0) 2017.10.22
함수와 매크로에 대한 정리  (0) 2017.10.22
Linux Thread Programming에 대해서...  (0) 2017.10.22