현재 작업중인 C 프로젝트에 ctags
을 사용하여 tags
파일을 생성했지만 많은 기능이 파일에 없습니다. 이것은 #ifdef
을 사용하기 때문에 원본 파일의 불균형 중괄호로 인해 발생합니다. A (간체) 예 :이 컴파일 및 리눅스에서 gcc -Wall
와 함께 완벽하게 작동#ifdef로 인해 불평형 중괄호가있는 소스 파일에 ctags가 울림
#include <stdio.h>
struct mystruct {
long member;
#ifndef _MSC_VER
}__attribute__ ((packed));
#else /* _MSC_VER */
};
#pragma pack(pop)
#endif /* _MSC_VER */
char* greeting_text(){
return "Hello world\n";
}
int main(int argc, const char* argv[]){
char * greeting = greeting_text();
printf(greeting);
return 0;
}
. 그러나 ctags problem.c
을 사용하여 구문 분석 할 경우 tags
파일에는 mystruct
에 대한 항목 만 포함되어 있습니다. 함수가 없습니다.
ctags --verbose
보고서 :
OPENING problem.c as C language file
problem.c: unexpected closing brace at line 8
problem.c: retrying file with fallback brace matching algorithm
OPENING problem.c as C language file
problem.c: unexpected closing brace at line 8
그래서 분명히
ctags
이 파일에 전 처리기 트릭을 좋아하지 않는다.
ctags
처리 방법이 있습니까?
ctags
의 맨 페이지에 명시 적으로이 문제가 언급되어 있지만 ctags
이 문제를 해결할 수 있음을 나타냅니다. 그러나 이것은 작동하지 않는 것 같습니다 ...
이것은 Exuberant Ctags 5.8 (Debian 패키지 1 : 5.8-4)입니다.
편집 :
는 또한 구조의 이러한 종류의 처리 ctags를 대안에 관심이 있어요.
좋은 아이디어. 그러나 문제는'ctags'가 처리하는 중간 파일의 줄 번호가 원본 파일의 줄 번호와 다를 것이므로 ctags를 사용하여 오른쪽 줄로 건너 뛰면 작동하지 않을 수 있다는 것입니다. 아직도, 나는 그것을 시도 할 것이다. – sleske
플러스, 이것은'.h'와'.c' 파일을 하나의 파일에 결합하는 파일도 생성 할 것이므로 ctags가 원래의 소스 파일을 어떻게 찾아야하는지 명확하지 않습니다 ('.c' 파일 또는 포함 된'.h' 파일 중 하나). 내가 볼거야 ... – sleske
전 처리기 출력에는 소스 청크가 온 파일과 라인을 나타내는 지시어가 있어야한다. ctag가 이것을 존중할 것인지 여부는 문제입니다. –