매크로는 goto문하고 비슷합니다.
goto문을 무조건적으로 쓰면 안된다는 생각이
실용주의의 시각에는 바보처럼 비춰지듯이
("If you want to go somewhere, goto is the best way to get there." Ken Thomson)
소스 보기가 나쁘기 때문에
매크로를 절대로 써서는 안된다는 생각 역시 바보같은 생각이겠지요.
C에서는 주로 퍼포먼스(inline), 조금씩 다른 반복되는 코드(template)를
위해서는 매크로를 씁니다. (상수 선언은 const C99)
그밖에도 언어에서 지원하지 않는 상속, 예외등을 구현하기 위해
쓰기도 합니다.
(C++ 코드에 매크로가 많으면 잘 못 짠 겝니다. 저는 주로 template specialization하는데
매크로를 씁니다만)
그러나, 바뜨
매크로 공부 교재를 찾으시나요?
MFC나 wxWidget를 추천합니다.
왜 매크로를 자제해야 하는 지를 온 몸으로 감동하실 겁니다.
그밖에도 내상을 입을 만큼 감동한 코드가 있읍니다.
아래는 Xine의 MPEG2 Video Decoder 코딩 스타일입니다.
#define Z x->y->z
int foo(struct A* a)
{
return a->Z->function(a->Z);
}
#undef Z
전부 이런식입니다. 위의 소스는 간략화했지만 알송 달송한 매크로로 범벅해놨더군요.
저는 이런 코드를 보면 멀미가 나면서 저자를 찾아가 패주고 싶습니다.
또 참고할 만한 Art 싸이트는 http://www.ioccc.org/main.html
#define에서 #, ## operator만 알면 다 안다고 말할 수 있읍니다.
# operator 예 (errno값이 매크로이고 strerror()를 못쓴다는 전제하)
ps. 매크로로 도배되어있는 DirectX Framework를 보고 있느라면 짜증이 물밀듯이 밀려오더군요.. 도통 디버깅도 어렵고#, ##연산자 때문에 툴의 지원도 제대로 못받구요..
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
매크로는 일반적으로
매크로는 일반적으로 가독성을 떨어뜨립니다.
매크로는 goto문하고 비슷합니다.
goto문을 무조건적으로 쓰면 안된다는 생각이
실용주의의 시각에는 바보처럼 비춰지듯이
("If you want to go somewhere, goto is the best way to get there." Ken Thomson)
소스 보기가 나쁘기 때문에
매크로를 절대로 써서는 안된다는 생각 역시 바보같은 생각이겠지요.
C에서는 주로 퍼포먼스(inline), 조금씩 다른 반복되는 코드(template)를
위해서는 매크로를 씁니다. (상수 선언은 const C99)
그밖에도 언어에서 지원하지 않는 상속, 예외등을 구현하기 위해
쓰기도 합니다.
(C++ 코드에 매크로가 많으면 잘 못 짠 겝니다. 저는 주로 template specialization하는데
매크로를 씁니다만)
그러나, 바뜨
매크로 공부 교재를 찾으시나요?
MFC나 wxWidget를 추천합니다.
왜 매크로를 자제해야 하는 지를 온 몸으로 감동하실 겁니다.
그밖에도 내상을 입을 만큼 감동한 코드가 있읍니다.
아래는 Xine의 MPEG2 Video Decoder 코딩 스타일입니다.
전부 이런식입니다. 위의 소스는 간략화했지만 알송 달송한 매크로로 범벅해놨더군요.
저는 이런 코드를 보면 멀미가 나면서 저자를 찾아가 패주고 싶습니다.
또 참고할 만한 Art 싸이트는
http://www.ioccc.org/main.html
#define에서 #, ## operator만 알면 다 안다고 말할 수 있읍니다.
# operator 예 (errno값이 매크로이고 strerror()를 못쓴다는 전제하)
## operator 예 (비실제적인 단순예)
___________________________________
Less is More (Robert Browning)
___________________________________
Less is More (Robert Browning)
저도 가능하면
저도 가능하면 매크로 사용은 지양하시라고 말씀드리고 싶습니다..
매크로 대용은 얼마든지 있으니 (const 변수, 인라인 함수)이를 이용하시는것이 디버깅도 쉽습니다.
ps. 매크로로 도배되어있는 DirectX Framework를 보고 있느라면 짜증이 물밀듯이 밀려오더군요.. 도통 디버깅도 어렵고#, ##연산자 때문에 툴의 지원도 제대로 못받구요..
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
댓글 달기