|
C/C++ 컴파일러는 표준에 적합하면서도 각 벤더들만의 확장 기능이 있는데, MSVC 컴파일러에는 있는 유용한 extension들을 살짝 들여다 보자. 기억이 맞는다면 Visual Studio .NET (7.0) 부터 지원된 기능들이다. 안타깝게도 gcc에서는 아래 기능들이 지원이 안 되는 것 같다. 그러나 반대로 MSVC에서 지원하지 않는 gcc의 재밌는 키워드 __builtin_expect도 있다. 1. __super // deriv_super.cpp String XEntity::GetPropertyCore(PCPROPERTY pProperty) throw(...) 2. __if_exists, __if_not_exists __super는 비교적 자주 쓸 수 있는 반면, 이 키워드는 그렇게 많이 쓰이지는 않을 것이다. 이 키워드는 특정 심볼이 컴파일 할 때, 존재하는지를 알려준다. 말 그대로 컴파일러 심볼 테이블에 있는 identifier인지를 확인 해주는 기능이다 (코드는 MSDN에서 발췌). template 한 마디로 #ifdef와 유사한 기능이라고 볼 수 있다. 그러나 단순히 identifier가 아닌 클래스 멤버 변수 유무까지 알 수 있으니 상당히 유용한 경우가 많다. 특히 매크로 작성시 정말 강력한 기능을 제공할 수 있다. 자세한 매크로 예를 다 들자면 너무 복잡하고, 예를 들어, 어떤 함수가 있을 경우에만 특정 코드를 만들어주는 #define을 만들 때 상당히 유용하다. #define 안에서는 #ifdef와 같은 것을 쓸 수가 없기 때문이다. 물론 #ifdef에 따라 #define을 해줘도 되지만 불편한 경우가 많다 #define XCOMP_INIT(object_type){ \부록) 여러 줄에 걸친 매크로 작성시 특히 주의 해야 할 점: '\'를 이용해서 line break를 할 수 있는데, 절대 '\' 뒤에 whitespace가 와서는 안 된다. 이 경우 친절하게 "error C2014: preprocessor command must start as first nonwhite space" 에러가 뜨는 경우도 있지만, 아주 고약한 에러가 떠서 에러를 찾는데 고생할 수 있다. 이럴 때, Visual Studio 에디터의 경우에는 [Ctrl+Shift+8]을 눌러 whitespace를 확인해봄으로써 쉽게 확인할 수 있다. 아래 그림의 경우 첫 번째 줄에서 \뒤에 공백이 하나 들어가있음을 볼 수 있다.
최근 등록된 덧글
개발자 입장에서의 수많은 ..
by Jiyoon at 02/04 저도 아들 돌잔치때 돌잡이 .. by 박상욱 at 01/18 미국 대학원 원서 작성중에 p.. by 태클사이야 at 01/13 TO: 박PD 로그인 하지 않아.. by 박응용 at 01/10 http://gigglehd.com/zbx.. by dhunter at 12/28 우와.. 좋네요. 태반이 .. by 윤광배 at 12/17 항상 좋은 글 잘 보고 있습니.. by y2k at 11/23 글이 좋아서 제 블로그에 담.. by 쏭섭 at 11/23 최근 등록된 트랙백
메뉴릿
이글루 파인더
|