Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

Pure Software Engineer :)

[C] namespace 본문

Software Engineering/Programming

[C] namespace

HelloJaewon 2014. 1. 29. 14:04

C++카테고리 이지만 C내용도 끼어서 써보자.

 

회사에서 C++ 를 사용해서 개발을 하고 있다.

그런데 구조체를 사용하는데 있어서 다음과 같은 형태로 사용하고 있었다.

 

1
2
3
4
5
6
7
8
9
10
11
12
struct Samle {
    int a;
    int b;
};
 
int main () {
    Sample s1;
    
    ...
    
    return 0;
}

 

아무생각도 없이 이런식으로 쓰고 있었는데, 문득 C언어에서는 typedef을 하지 않으면 아래와 같이 struct 키워드를 붙여서 사용해야만 했다는것이 기억이 났다.

 

1
2
3
4
5
6
7
8
9
10
11
12
struct Samle {
    int a;
    int b;
};
 
int main () {
    struct Sample s1;
    
    ...
    
    return 0;
}

 

찾아본 결과 C와 달리, C++에서는 모든 struct/union/enum/class 선언은 암묵적으로(implicitly) typedef 한 것처럼 동작한다는 것이었다.

 

회사에서 개발한지 1년이 다되어 가는데 이제서야 문득 이게 궁금해지다니...참ㅠㅠ

 

찾다가 보니 c namespace에 대해서도 조금 알게 되었다.

 

C에는 identifier에 대한 총 4가지의 namespace 를 가지고 있으며 이들은 다음과 같다.

1. Label (goto 에서 사용하는)

2. Tags (structure, union, enumeration 이름)

3. structure, unions의 멤버

4. all other identifiers (함수이름, 변수이름, type(def) 이름, enumeration 상수)

 

따라서, 위 1~4번에서 다른 namespace에 속한다면 이름이 같아도 conflict가 발생하지 않는다.

예를들어, sample이라는 이름으로 구조체(2번)와 함수(4번)을 사용한다고 해도 둘다 충돌 하지않는다.

하지만, 당연하겠지만 같은 이름으로 사용하면 프로그램 가독성은 떨어질 것이다.

 

References

http://stackoverflow.com/questions/612328/difference-between-struct-and-typedef-struct-in-c

http://stackoverflow.com/questions/3793952/understanding-c-namespaces