2012-03-02 2 views
1

내 질문에 매우 미안하다면 죄송합니다. 전처리 기 cpp에 의해 생성 된 출력을 이해하고 싶습니다. 제가 아주 기본적인 프로그램을 가지고 있다고 가정 해 봅시다.cpp 전 처리기 출력을 이해할 수 없습니까?

#include <stdio.h> 
#include <stdlib.h> 

int x=100; 
int main() 
{ 
    printf ("\n Welcome..\n"); 
} 

다음 명령을 실행합니다. 상기 라인의 의미는 무엇 main.i

# 1 "/usr/include/stdio.h" 1 3 4 

cpp main.c main.i 

는? ..

답변

5

gcc documentation는 핌 C 처리기의 출력을 설명한다.

C 프리 프로세서의 출력은 모든 전처리 지시어 라인이 빈 줄과 공백 모든 코멘트로 대체 된 것을 제외하고, 많은 입력과 같습니다 여기

는 관련 부분이다. 긴 행의 빈 줄은 버려집니다.

소스 파일 이름과 줄 번호 정보는 이들은 linemarkers라고

# linenum filename flags 

형태의 선으로 전달된다. 필요에 따라 출력에 삽입됩니다 (단, 문자열 또는 문자 상수는 사용할 수 없습니다). 즉, 다음 줄은 파일 줄에서 linenum에서 시작되었습니다. 파일 이름에는 인쇄 할 수없는 문자가 절대로 포함되지 않습니다. 그들은 8 진수 이스케이프 시퀀스로 대체됩니다.

파일 이름 뒤에 1', 2 ', 3', or 4'가 0 이상인 플래그가옵니다. 플래그가 여러 개인 경우 공백으로 구분됩니다. 다음은 플래그의 의미입니다.

1 이는 새 파일의 시작을 나타냅니다.
2 이는 다른 파일을 포함시킨 후 파일로 반환 함을 나타냅니다.
3 이는 다음 텍스트가 시스템 헤더 파일에서 나왔으므로 특정 경고를 표시하지 말아야 함을 나타냅니다.
4 이것은 다음 텍스트가 암시 적 extern "C"블록으로 래핑 된 것으로 처리되어야 함을 나타냅니다.

+0

@Whoami 전처리기를 이해하고 싶습니다. 과거에 여러 기괴한 C/C++ 문제가 발생했습니다. 사전 처리 된 결과물을 보면서 진행 상황을 파악할 수있는 유일한 방법이었습니다. 엄청난 수의'#include '가있는 대규모 프로젝트에서 특히 그렇습니다 – rob05c