2010-03-18 3 views
3

몇 가지 알맞은 크기의 C 프로그램을 유지하며 전적으로 정확한 상호 참조 정보를 사용합니다. "태그"또는 다른 근사법과 달리 이러한 정보는 일반적으로 C 언어의 전체 범위 지정 규칙을 알고 있으며 이에 따라 정확한 정보를 제공 할 수있는 컴파일러가 생성합니다. 예를 들어, 여기에 lcc 컴파일러에서 얻은 정보의 단편이다C99 코드에 대한 문자와 정확한 식별자 상호 참조를 얻으려면 어떻게해야합니까?

function eval src=scheme.nw:4101.0 use=scheme.nw:4101.0 
    use=scheme.nw:4174.35 use=scheme.nw:4334.11 use=scheme.nw:4335.11 
    use=scheme.nw:4337.11 use=scheme.nw:4340.14 use=scheme.nw:4341.4 
    use=scheme.nw:4351.12 use=scheme.nw:4305.32 use=scheme.nw:4324.29 
    use=scheme.nw:4278.7 use=scheme.nw:4201.8 use=scheme.nw:4234.11 
    type=struct Value function(pointer to struct Exp,pointer to incomplete 
    struct Env defined at scheme.nw:3889) sclass=auto scope=GLOBAL flags=0 
    ref=3.710000 ncalls=46 

이 그 기능 eval 소스 파일 scheme.nw, 라인 (4101), 열 0으로 정의하고,이 eval이 모든 장소를 나열 알려줍니다 사용되었습니다.

내 문제 : lcc은 ANSI C에서만 작동하며 대부분의 프로젝트는 C99로 마이그레이션 중입니다. C99 프로그램에 대한 정확한 상호 참조 정보를 제공하는 컴파일러 또는 도구는 무엇입니까?

Linux 지원은 필수입니다. 자유 소프트웨어는 좋지만 절대적으로 필요하지는 않습니다.

답변

3

Clang index library은 꽤 괜찮은 후보자처럼 보입니다. 개인적으로 심각한 적합성 테스트를 수행하지는 않았지만 they claim은 누락 된 C99 기능 만 부동 소수점 pragma (상호 참조 생성에 영향을 미치지 않아야 함)라는 점입니다.

+0

유용하지만 외모는 복잡해 보입니다. 평가하는 데 시간이 걸릴 것입니다. 포인터 주셔서 감사. +1 –

관련 문제