2012-01-19 3 views
2

나는 오늘 플렉스와 들소로 놀고 있었는데, 뭔가 이상한 점이 내 관심을 끌었다.gcc는 소스의 출처를 어떻게 알 수 있습니까?

localhost:c math4tots$ lex c.l 
localhost:c math4tots$ yacc -d c.y 
localhost:c math4tots$ rm c.l c.y 
localhost:c math4tots$ gcc c.c lex.yy.c y.tab.c 
c.y: In function ‘opr’: 
c.y:120: error: ‘nodeType’ has no member named ‘oper’ 

난 단지 c.c의 된 lex.yy.c 및 y.tab.c가을 (c.h와 y.tab.h도 헤더에 포함된다)에 전달했지만, 어떻게 든 GCC는 c.l 및 c.y.에 대해 알고 사실, c.l과 c.y를 삭제 한 후에도 gcc는 c.y에서 코드의 오류가 어디인지를 압니다. 어떻게 그럴 수 있죠?

과거에 사용했던 여러 가지 도구에 대해 비슷한 것을 보았지만 정확히 무엇인지 기억할 수 없습니다.

+0

항상 GCC 컴파일러에'-Wall'을 넘겨주고 더 이상의 경고가 나올 때까지 코드를 향상시켜야합니다. –

답변

3

당신의 라인을 따라 파일의 일부 마커를 확인할 수있는 것들 : 바로이 목적을 위해 사용됩니다

#line 75 "c.y" 

의를 생성 한 원래 파일에 대해 오류 메시지 나 경고를보고 할 수있는 능력 컴파일하고있는 실제 파일들.

기본적으로 c.c 파일로 이동하여 수정해야 할 파일 c.y의 해당 줄을 알아 내려고합니다.

이러한 의미에서 C 파일은 오브젝트 파일과 다를 바 없습니다. 당신은 care을 자동으로 생성했기 때문에 그 안에 무엇이 있는지를 알지 못합니다. 문제가있는 경우 c.y에서 올바른 행으로 직접 돌아가서 소스에서 해결할 수 있기를 원합니다.

2

생성 C 파일

하고 컴파일러이 지정 후 다음 행 라인 (119) 및 컴퓨팅 따라서 위치 다음에 파일 c.y는 것을 믿는다 같은 (또한 생성) 어떤 line control preprocessor directives있다.

관련 문제