2011-09-09 2 views
1

분석을 위해 내 C 프로그램에서 선언 한 모든 변수를 나열하고 싶습니다. 내가 이것을 할 수있는 쉬운 방법이 있습니까? 나는이 목적을 위해서 렉서를 만드는 것은 성가신 일이라고 생각할 것이다. 다른 방법이 있습니까?C에서 변수 선언 검색/나열

글쎄, 나는 분명히해야한다고 생각한다 :-). 필자가 작성하려고하는 C 라이브러리를 사용하여 많은 C 파일을 분석하려고합니다.이 라이브러리는이 기능을 필요로합니다. 그러므로 C로이 작업을 수행 할 수 있다면 (내 라이브러리와 통합 할 수 있기 때문에) 좋을 것입니다. 그러나 다른 언어로도 사전 처리 할 수 ​​있습니다. 그러나 그것은 의존성을 증가시킬 것입니다.

+0

뭘하려는거야? 실행 파일에 대한 objdump 또는 링커 출력을 검사하여 스택이 아닌 변수의 위치와 크기를 쉽게 결정할 수 있습니다. – user47559

답변

1

cscope (http://cscope.sourceforge.net/)는 프로그램의 모든 기호를 식별하고 색인화 할 수 있으며 명령 줄 또는 GUI 도구에서 기호 데이터베이스를 쿼리하는 명령 줄 모드를 가지고 있습니다.

2

typedef 등을 처리하고 싶다면 어쨌든 매우 강력한 파서를 작성해야 할 것입니다. clang/llvm을 사용하고 싶을 수도 있습니다. 원하는 데이터를 쉽게 출력하도록 수정할 수 있습니다.

1

작업을 올바르게 수행하려면 상당한 양의 C 전 처리기와 어휘 분석기가 필요합니다. 이는 상당히 많은 C 컴파일러입니다.

작업을 임시로 수행하는 것이 더 쉽습니다.하지만 임시 작업을 선택할 수 있습니다.

+0

ad-hoc 의미 하시겠습니까? – Gooner

+0

_ad hoc_의 일반적인 의미는 'this for'라틴어로 '특정 목적으로 만 형성, 배열 또는 완료 되었음'을 의미합니다. 그래서 본격적인 C 전처리 기와 어휘 분석기로 작업하는 것보다, 사전에 명시된 접두사가있는 내장 유형과 유형 만 인식하면 충분하다. 'struct xxx' 나'union yyy' 나'enum zzz'와 같은 것들입니다. 이것은 종종 꽤 많은 변수를 가져옵니다. 더 자주, 그것은 많이 그리워합니다. 그런 다음'www_t' ('_t' 접미사 인식) 추가에 대해 생각해보십시오. 그리고 당신은'FILE'에 대해 걱정하고 있습니다. 그건 _ad hoc_입니다. –