'비주얼스튜디오'에 해당되는 글 2건
- 2010.06.27 VAX를 활용한 헤더중복 #ifndef블럭 자동으로 생성하기 2
- 2010.06.10 솔루션 탐색기에서 파일이름 변경후 이름순 정렬시키기
새로운 헤더를 만들면 항상하게 되는 작업은 바로 헤더중복을 방지하기 위한 #ifndef블록이다.
CTest라는 클래스와 함께 헤더, 소스파일을 생성한다면 파일을 생성함과 동시에 아래 구문을 써넣어야된다.
#define _CTEST_H_
...
#endif
작업량이 많을 때 매번 이러는 것은 상당히 귀찮은 작업임이 틀림없는데.. 한편 VAX에서의 VA Snippets를 활용하면 이를 간단하게 해결할 수 있다.
아래처럼 VAX의 옵션에 들어가서 Advanced > Suggestions > Edit VA Snippets(또는 Shift+마우스오른클릭 후 Edit VA Snippets)를 누른다.
snippets편집창이 뜨면 New를 눌러서 다음과 같은 식으로 추가한다. 여기서 Title에 타이틀명을 적어줘야 소스파일에서 오른쪽 클릭으로 자동삽입 텍스트 창을 띄울 수 있다.(이따 또 설명) 물론 한글도 가능하다.
여기서 $...$은 일종의 매크로인데, http://www.wholetomato.com/products/features/vasnippets.asp 에 가보면 여러가지 매크로와 기타 정보등을 얻을 수 있다. (아래 적어놓겠음)
참고로 자동텍스트를 추가하는 방법이 2가지가 있는데 하나는 Insert Snippets이고 하나는 Surround With ...이다. 전자는 문자열을 추가한 후, 바로 뒤에 커서가 위치하게 되고, 후자는 블록을 지정한 상태라면 selected$부분에 해당 블록부분이 들어간 후, 코드가 끝난뒤에 커서가 위치하게 되고 블록을 지정하지 않은 상태라면 $selected$부분에 커서가 위치하게 된다. 이를 구분하는 방법은 코드중 $selected$가 있느냐 없느냐에 따라 나뉜다.
위와 같이 입력한 후 소스파일상으로 돌아와서 아무곳에서나 오른쪽 클릭하면 왼쪽 메뉴가 뜨는데, Surround With .. 하위 메뉴에 들어가보면 방금 등록한 것이 새로 생겼음을 확인할 수 있다.(코드중 $selected$가 존재한다면 Surround With... 메뉴에 나오고 그외에는 VAX메뉴의 Insert Snippets..컨텍스트 메뉴(Shift+마우스오른클릭)로 해야한다. 아무튼 고걸 누르면...
아래와 같이 일련의 텍스트가 자동으로 입력된다. (커서가 있는 방향이 $selected$ 매크로인 것을 알 수 있다.)참고로 파일 이름은 RootPurposeProcess.h였다. 아까도 언급했었는데, 메뉴의 엔트리에 들어가려면 Title에 꼭 어떤 문자를 입력해서 넣어줘야한다. 넣지 않고서 그냥 short cut만 등록하면, 엔트리엔 존재하지 않지만 내부적으로 특정 문자열을 캐치해서 자동으로 넣어준다. for를 입력할때 괄호가 생기는 것처럼...
여담이지만, 위 메뉴에서 우리가 추가했던 SA project guard header의 순서를 제일 위로 올릴 수도 있는데, Edit VA Snippets의 왼쪽 엔트리리스트에서 그냥 SA project guard header를 클릭 드래그해서 제일 위로 올려주기만 하면된다.
아래는 VAX홈페이지에서 발췌해온 매크로표이다.
Reserved String | Meaning | |
Date | $DATE$ | Year/month/day formatted as %04d/%02d/%02d |
$DAY$ | Day of month formatted as %d | |
$DAY_02$ | Day of month formatted as %02d | |
$DAYNAME$ | Three-character abbreviation of day | |
$DAYLONGNAME$ | Full name of day | |
$MONTH$ | Month formatted as %d | |
$MONTH_02$ | Month formatted as %02d | |
$MONTHNAME$ | Three-character abbreviation of month | |
$MONTHLONGNAME$ | Full name of month | |
$YEAR$ | Year formatted as %d | |
$YEAR_02$ | Year formatted as %02d | |
Time | $HOUR$ | Hour formatted as %d |
$HOUR_02$ | Hour formatted as %02d | |
$MINUTE$ | Minute formatted as %02d | |
$SECOND$ | Second formatted as %02d | |
File | $FILE$ | Full filename with path* |
$FILE_UPPER$ | Full filename with path in uppercase* | |
$FILE_BASE$ | Filename without path or extension* | |
$FILE_BASE_UPPER$ | Filename without path or extension in upper case* | |
$FILE_EXT$ | Filename extension* | |
$FILE_EXT_UPPER$ | Filename extension in upper case* | |
$FILE_PATH$ | Path of file* | |
$FILE_PATH_UPPER$ | Path of file in upper case* | |
General | $clipboard$ | Current clipboard |
$end$ | Position of caret after expansion | |
$selected$ | Current selection** | |
$$ | Literal '$' character | |
Symbol Context | $MethodName$ | Name of containing method |
$MethodArgs$ | Method parameters | |
$ClassName$ | Name of containing class | |
$BaseClassName$ | Name of base class of containing class | |
$NamespaceName$ | Fully qualified namespace name | |
GUID | $GUID_DEFINITION$ | Generated GUID formatted for use in a definition |
$GUID_STRING$ | Generated GUID formatted for use in a string | |
$GUID_STRUCT$ | Generated GUID formatted for use in a struct | |
The following reserved strings are available only in refactoring snippets | ||
Refactor | $GeneratedPropertyName$ | Property name generated during Encapsulate Field |
$generatedPropertyName$ | Same as $GeneratedPropertyName$ but with lower-case first letter | |
$MethodArg$ | One parameter of the method and its type | |
$MethodArgName$ | One parameter of the method | |
$MethodArgType$ | Type of one parameter of the method | |
$MethodBody$ | Body of implementation | |
$MethodQualifier$ | Optional qualifiers of method | |
$ParameterList$ | Parameters separated by commas | |
$SymbolContext$ | Context and name of method | |
$SymbolName$ | Name of method | |
$SymbolPrivileges$ | Access of method | |
$SymbolStatic$ | Keyword static or blank | |
$SymbolType$ | Return type of method | |
$SymbolVirtual$ | Keyword virtual or blank |
솔직히 해당 블록을 감싸서 for문으로 만든다던지.. 하는 것은 사실상 거의 필요없다. 주석처리하는 경우는 많지만.. 다른 단축키도 얼마든지 많기 때문에.. 하지만 파일정보에 대한 것이라던지.. 위와같이 헤더중복방지블록을 만든다던지 이런경우에는 매우 유용하기 때문에 이쪽으로 응용을 해본다면 정신건강에 매우 도움이 될것같다.
기본으로 등록되어있는 것중에 Win32 standard application도 있는데.. 요건.. 윈도우 하나를 깔끔하게 띄워주는 소스를 자동으로 입력한다. 같은 방법으로 Win32 dialog application을 하나 등록해놓고 다이알로그를 띄우는 것도 만들어낼 수 있겠당.
'비주얼스튜디오' 카테고리의 다른 글
솔루션 탐색기에서 파일이름 변경후 이름순 정렬시키기 (0) | 2010.06.10 |
---|
VS2008에서 테스트했습니다.
솔루션 탐색기에서 파일이름을 변경한 경우 파일들의 순서를 변경된 이후의 이름으로 재정렬하고 싶을때 쓰는 방법입니다.(파일명이 바껴도 이전 정렬순서를 가지죠) 이름순 정렬이 익숙하다보니.. 변경된 이후에는 파일의 위치를 못찾는 경우가 허다해서요. 이를 해결키위해 지금껏 프로젝트를 재시작하여 해결했었습니다. 근데 이렇게 하니까 쉽게 되는군요. 혹시 저랑 같은 경우시라면 요긴하게 써먹으시길^^
모든파일표시로 바꾸었다가, 한번더 눌러서 해제시킵니다. 그럼 재정렬되어있을거에요.
추가팁으로.. 모든파일표시모드는요.. 소스폴더의 물리적인 구조를 보여주는 것으로 상당히 요긴합니다.(필터는 논리적이죠. 폴더가 아닙니다.)이클립스를 써보신분들은 아실테지만.. 헤더/소스파일을 추가했을때.. 그 헤더/소스파일이 위치하고 있는 부분에 실제 파일이 없으면 해당 파일이 없다는 아이콘이 뜨죠. 이 경우도 마찬가지입니다. 다음과 같은 아이콘이 뜹니다.
ISceneNodeUpdateMethod.h파일이 없다는얘기네요! 솔루션 탐색기에서 삭제해주시던지 만들어주셔서 후속조치를 해주시면됩니다.
아래와 같은 아이콘이 뜨는경우는 소스폴더내가 아닌 다른 위치에 존재하는 파일을 추가해준 경우입니다. 링크같은 표시가 있죠.
'비주얼스튜디오' 카테고리의 다른 글
VAX를 활용한 헤더중복 #ifndef블럭 자동으로 생성하기 (2) | 2010.06.27 |
---|