전 처리기 지시문이 많은 소스 파일이 있다고 가정 해 봅시다. 전처리 기가 완료된 후 어떻게 보이는지 확인할 수 있습니까?
전 처리기 지시문이 많은 소스 파일이 있다고 가정 해 봅시다. 전처리 기가 완료된 후 어떻게 보이는지 확인할 수 있습니까?
답변:
cl.exe
Microsoft Visual C ++에 대한 명령 행 인터페이스 인에는 사전 처리 된 파일을 출력하기위한 세 가지 옵션이 있으므로 Visual C ++에 대한 이전 응답의 불일치가 있습니다.
/E
: stdout으로의 전처리 (GCC의 -E 옵션과 유사)/P
: 파일 전처리/EP
: #line 지시문없이 stdout으로 전처리#line 지시문없이 파일을 사전 처리하려면 /P
및 /EP
옵션을 결합하십시오 .
/P
OBJ 파일의 생성을 억제하는 것이다. 따라서 /P
옵션 을 넣으면 실제로 생성되지 않기 때문에 일부 obj 파일을 찾을 수 없다는 링크 오류가 발생할 수 있습니다.
VS Developer command prompt
하고 있는지 확인하십시오 . 컴파일러는 일반적인 comand 프롬프트에서 사용할 수 없습니다. Command prompt
cl
대부분의 컴파일러에는 전처리기를 실행할 수있는 옵션이 있습니다. 예를 들어 gcc는 -E를 제공합니다.
-E Stop after the preprocessing stage; do not run the compiler proper.
The output is in the form of preprocessed source code, which is sent
to the standard output.
따라서 다음을 실행할 수 있습니다.
gcc -E foo.c
이러한 옵션을 찾을 수 없으면 컴퓨터에서 C 전처리기를 찾을 수도 있습니다. 일반적으로 cpp라고하며 이미 경로에 있습니다. 다음과 같이 호출하십시오.
cpp foo.c
다른 디렉토리에서 포함해야하는 헤더가있는 경우 일반 컴파일에서와 같이 -I / path / to / include / dir을 이들 중 하나에 전달할 수 있습니다.
Windows의 경우 전문가가 아니기 때문에 다른 포스터에 남겨두고 답변을 제공하겠습니다.
솔루션 탐색기에서 파일을 마우스 오른쪽 버튼으로 클릭하고 속성으로 이동하십시오. 구성 특성-> C / C ++-> 전 처리기에서 "전처리 된 파일 생성"이 찾고 있습니다. 그런 다음 솔루션 탐색기에서 파일을 마우스 오른쪽 버튼으로 클릭하고 "컴파일"을 선택하십시오. 사전 처리 된 파일은 출력 디렉토리 (예 : Release, Debug)에서 확장자가 .i 인 주석으로 작성됩니다 (의견이있는 Steed 덕분에).
Release
, Debug
확장자) .i
.
일반적으로 전 처리기의 출력에 대해 약간의 후 처리를 수행해야합니다. 그렇지 않으면 모든 매크로가 하나의 라이너로 확장되므로 읽기 및 디버깅이 어렵습니다. C 코드의 경우 다음과 같은 것으로 충분합니다.
gcc -E code.c | sed '/^\#/d' | indent -st -i2 > code-x.c
C ++ 코드의 경우 실제로 훨씬 더 어렵습니다. GCC / g ++의 경우이 Perl 스크립트가 유용하다는 것을 알았습니다 .
Visual Studio에서는 / P를 사용하여 파일 (또는 프로젝트)을 컴파일 할 수 있습니다.
bk1e와 Andreas M.이 대답했듯이 컴파일러의 / P 옵션은 파일을 전처리하도록합니다. 그러나 VS2005 및 Platform Builder (내장 ARM 프로세서 용)를 사용하는 프로젝트에서 프로젝트는 대화 상자 (Jim B에서 설명한대로)에 해당 옵션을 활성화하는 옵션을 표시하지 않았습니다.
CL을 수동으로 실행하고 / P를 추가 할 수 있었지만 전체 빌드 중에 Platform Builder에서 보이지 않게 활성화 된 적절한 명령 줄 옵션을 모두 알지 못했기 때문에 실패했습니다. 그래서 모든 옵션을 알아야했습니다.
내 해결책은 build.log 파일을보고 실행 한 줄을 찾는 것이 었습니다.
CL blah-blah-blah myfile.c
이 줄을 클립 보드에 복사했습니다. "blah-blah-blah"부분에는 빌드 옵션이 포함되어 있으며 엄청났습니다.
IDE로 돌아가서 myfile.c를 마우스 오른쪽 버튼으로 클릭하고 "빌드 창 열기"를 선택한 다음 해당 창에서 빌드 명령 행을 붙여넣고 "/ P"를 추가했습니다.
CL /P blah-blah-blah myfile.c
끝난. 전 처리기 출력을 포함하는 myfile.i 파일이 생성되었습니다.
CPIP 는 Python으로 작성된 새로운 C / C ++ 전 처리기입니다. 사전 처리 된 파일의 자세한 시각적 표현을 원하면 샷을 제공하십시오.
CPIP는 Python으로 구현 된 C / C ++ 전 처리기입니다. 대부분의 전처리 기는 전처리를 가능한 빨리 완료해야하는 더러운 작업으로 간주합니다. 이것은 전처리 단계에서 미묘한 결함을 추적하기가 매우 어려워 질 수 있습니다.
전처리 과정을 실제로 이해하는 개발자는 거의 없으며, 많은 사람들에게 이것은 불분명 한 흑 마법입니다. CPIP는이를 개선하고 사전 처리의 모든 세부 사항을 기록함으로써 CPIP가 파일 종속성, 매크로 사용 등에 관한 훌륭한 시각적 정보를 생성 할 수 있도록합니다.
CPIP는 cpp (또는 다른 기존의 전 처리기)를 대체하도록 설계되지 않았으며 대신 CPIP는 명확성 및 이해를 처리 속도보다 중요한 것으로 간주합니다.