![Extag가 프로토타입 태그를 생성할 수 있도록 C 구문 수정 매크로를 실행 취소합니다.](https://linux55.com/image/133616/Extag%EA%B0%80%20%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9E%85%20%ED%83%9C%EA%B7%B8%EB%A5%BC%20%EC%83%9D%EC%84%B1%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%8F%84%EB%A1%9D%20C%20%EA%B5%AC%EB%AC%B8%20%EC%88%98%EC%A0%95%20%EB%A7%A4%ED%81%AC%EB%A1%9C%EB%A5%BC%20%EC%8B%A4%ED%96%89%20%EC%B7%A8%EC%86%8C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
tags
Extags를 사용하여 vim 파일을 성공적으로 만들 수 있습니다 (활기 넘치는 c 태그).
그러나 태그를 생성하면프로토타입으로 이동시스템 헤더가 다음 형식의 구문을 사용하여 매크로를 수정하기 때문에 함수의 기능이 작동하지 않습니다.
#define _EXFUN(name, proto) name proto
예를 들어 string.h
사용하십시오 .
char *_EXFUN(strchr,(const char *, int));
_EXFUN
대신 라벨을 생성합니다 strchr
.
_EXFUN /somedir/include/string.h /^char *_EXFUN(strchr,(const char *, int));$/;" p
다음 명령을 사용하여 레이블을 만듭니다.
exctags -f tags.p --language-force=c --c-kinds=p file1 file2 ...
나는 extags 매뉴얼 페이지를 정독하고 -I
매크로 확장에 영향을 주기 위해 다양한 옵션을 시도했지만 소용이 없었습니다. 이 문제를 해결한 사람이 있나요?
답변1
전처리된 파일을 실행 하고 전처리기의 주석( )을 보고 파일 에 줄 번호를 쓰도록 ectags
요청합니다 ( 또는 ).--line-directives=yes
tags
-n
--excmd=numbers
cc -E prog.c >prog.p
ectags --line-directives=yes --language-force=c --c-kinds=p -n prog.p
예제 C 파일:
#define _EXFUN(name, proto) name proto
char *_EXFUN(strchr,(const char *, int));
결과 tags
파일:
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR Darren Hiebert /[email protected]/
!_TAG_PROGRAM_NAME Exuberant Ctags //
!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
!_TAG_PROGRAM_VERSION 5.8 //
strchr prog.c 3;" p file:
보시다시피 의 프로토타입은 strchr
의 라인 3에 나타나는 것으로 나열됩니다 prog.c
.
이것결점이는 전처리 매크로에 대한 태그 항목을 얻지 못하기 때문입니다.
ectags
원본 파일과 함께 전처리된 파일을 실행하여 이 문제를 해결할 수 있습니다 .
ectags --line-directives=yes --language-force=c --c-kinds=pd -n -I _EXFUN prog.p prog.c
생산하다
[...]
_EXFUN prog.c 1;" d file:
strchr prog.c 3;" p file:
답변2
이 특정 매크로를 처리하려면 다음 옵션이 있습니다 --regex-<LANG>
.
ctags --regex-c='/^[^#]*_EXFUN *\( *([^ ,]+),.*/\1/p/' ...
파일 을 생성합니다 tags
.
_EXFUN test.c 1;" d file:
strchr test.c /^char *_EXFUN(strchr,(const char *, int));$/;" p