본문 바로가기

프로그래밍/API

C/C++의 anonymouse structures...

다소 생소하게 느끼는 개발자도 있으리라 본다. 일반적인 방식으로 구조체(struct)를 정의하는 개발자라면 더 그럴것이다.

IOCP개발중 가장 많이 사용하는 구조체 중의 하나가 OVERLAPPED라는 구조체이다.


참으로 난감하지 않는가? 어떤 개발자는 알것이고 어떤 개발자는 컴파일이 되느냐 의심가는 개발자도 있을줄로
안다.

union이나, struct의 이름이 명시되지 않은 접근 방식을 anonymouse structures/unions 라고 한다.

심지어는
// anonymous_unions.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;

int main() {
    union {
        int d;
        char *f;
    };

    d = 4;
    cout << d << endl;
    f = "inside of union";
    cout << f << endl;
}

이런 코드도 가능하다. 어떤 개발자 들은 이러한 코드가 이해도를 떨어 트린다고 할수도 있겠지만.. 필요 악인것 같다. 나도 자주 사용하니 말이다.. 특히, struct { } 같은 경우 변수를 그룹핑 하는 용도로 많이 사용한다.

GCC에서는 이러한 코드도 가능하다.
struct sample {
    int a, b, c;
} S = { .a = 10, .b = 20, .c = 30 };

이 코드는 G++에서는 컴파일 되지 않는 코드 이지만, 나름대로 상당히 의미있게 사용되기도 한다.

한번쯤 이런 소스코드를 본다면 당황하지 말기를 바란다..
 
* C/C++ 이란 놈은 양파같아서 안에 품고 있는 것들이 많은 걸 새삼 느끼게 해 주는 문법이 아닌가 생각된다.