2016-08-25 3 views
1

This 대답에 대한 헤더와 소스 파일을 포함 한 후 C/C++ 파일을 결과로 말한다 :쇼 (기계 언어로 번역 전) 헤더

컴파일러는 하나의 큰 소스 (cpp를) 제대로의 헤더 파일을보고 포함. 원본 파일은 컴파일 단위이며 이 개체 파일로 컴파일됩니다.

어떻게 든이 큰 .cpp (.c) 파일을 볼 수 있습니까? 그렇다면 Linux (gcc) 및 Windows (VisualStudio) 플랫폼에서이를 수행하는 방법.

추신 : Visual Studio에서/P 옵션을 시도했습니다 (솔루션 탐색기에서 파일을 마우스 오른쪽 단추로 클릭하고 구성 속성 -> C/C++ -> 전 처리기 -> 파일 전처리 -> [ YES/P])하지만 더 이상 C++처럼 보이지 않는 여러 * .i 파일을 얻었습니다 (아마도 C++이지만 많은 템플리트, 메모리 할당에 대한 정의 등이 있습니다). 내가 언급 한 대답은 "하나의 큰 .cpp 파일"에 대한 이야기였습니다. 따라서 #include 지시문 만 해당 파일로 대체되거나 잘못 입력되었으며 * .i 출력이 내가 요청한 내용이라고 가정했습니다.

+1

[cpp] (http://linux.die.net/man/1/cpp)를 찾으십니까? – dvhh

답변

5

Linux의 경우 -E gcc 옵션을 사용하십시오. stdout에 "큰"소스 코드를 인쇄하여 파일로 리디렉션 할 수 있습니다.

Visual Studio의 경우 stdout은 /E이고 파일을 인쇄하려면 /P입니다. 그런데

, 당신의 질문은 이미 개별적으로했다 : 당신이 무엇을 요구 하나 당 하나 개의 *.i 파일을 얻을로

*.i 파일이 정확히 *.cpp 파일 단일 소스 파일을 gcc -E으로 보내면 GNU 컴파일러에서 동일하게됩니다. *.i 파일은 모두 *.cpp 파일이며 완전히 포함 된 모든 포함됩니다. C++ 파일에는 표준 라이브러리 헤더가 직접 또는 간접적으로 다른 포함을 통해 포함되어 있으므로 전처리 된 파일에 무서운 모양의 코드가 많이 생겼습니다. 그럼에도 불구하고 여전히 C++이며, 소스에서 가지고있는 것보다 다소 "순수한"C++입니다. Visual Studio 전 처리기에는 출력을 위해 #line 지시어도 포함되어 있습니다. 컴파일 오류에 올바른 행 번호를보고하기 위해 컴파일러에서 사용됩니다. 당신은 /EP으로 그들을 억제 할 수 있습니다.

모든 것이 올바른지 확인하려면 빈 프로젝트를 만들고 표준 라이브러리 또는 타사 헤더를 포함하지 않고 자신의 원본 및 헤더 파일 중 몇 개를 재생할 수 있습니다.

+1

중복 된 것으로 밝혀진 질문에는 답하지 마십시오. 대신 복제물로 표시하여 닫을 수 있습니다. – 2501

+0

@ 2501 제 편집 내역을 참조하십시오. –

+0

@ 2501 Ok, 다음 번에 생각하겠습니다. 그럼에도 불구하고,이 경우 작성자는 그의 질문을 편집했으며 더 이상 복제본이 아닙니다. 중복 표시를 취소 할 수 있습니까? – Sergey

관련 문제