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 |