logo

C의 컴파일 과정

편집이란 무엇입니까?

컴파일은 소스 코드를 목적 코드로 변환하는 과정입니다. 이는 컴파일러의 도움으로 수행됩니다. 컴파일러는 소스 코드에 구문적 또는 구조적 오류가 있는지 확인하고, 소스 코드에 오류가 없으면 개체 코드를 생성합니다.

C의 컴파일 과정

c 컴파일 프로세스는 입력으로 가져온 소스 코드를 개체 코드 또는 기계어 코드로 변환합니다. 컴파일 프로세스는 전처리, 컴파일, 어셈블링, 링크의 네 단계로 나눌 수 있습니다.

전처리기는 소스 코드를 입력으로 사용하고 소스 코드에서 모든 주석을 제거합니다. 전처리기는 전처리기 지시문을 가져와 해석합니다. 예를 들어, , 프로그램에서 지시어를 사용할 수 있는 경우 전처리기가 지시어를 해석하고 이 지시어를 프로그램의 내용으로 대체합니다. 'stdio.h' 파일.

다음은 프로그램이 실행 가능한 형식으로 변환되기 전에 거치는 단계입니다.

    전처리기 컴파일러 어셈블러 링커
C의 컴파일 과정

전처리기

소스코드는 텍스트 편집기로 작성된 코드이며, 소스코드 파일의 확장자는 '.c'입니다. 이 소스 코드는 먼저 전처리기에 전달된 다음 전처리기가 이 코드를 확장합니다. 코드를 확장한 후 확장된 코드가 컴파일러에 전달됩니다.

한 달은 몇 주입니까?

컴파일러

전처리기에 의해 확장된 코드는 컴파일러로 전달됩니다. 컴파일러는 이 코드를 어셈블리 코드로 변환합니다. 또는 C 컴파일러가 전처리된 코드를 어셈블리 코드로 변환한다고 말할 수도 있습니다.

어셈블러

어셈블리 코드는 어셈블러를 사용하여 객체 코드로 변환됩니다. 어셈블러에서 생성된 개체 파일의 이름은 소스 파일의 이름과 동일합니다. DOS에서는 객체 파일의 확장자가 '.obj'이고, UNIX에서는 확장자가 'o'이다. 소스 파일 이름이 다음과 같은 경우 '안녕하세요.c', 그러면 개체 파일의 이름은 'hello.obj'가 됩니다.

링커

주로 C로 작성된 모든 프로그램은 라이브러리 기능을 사용합니다. 이러한 라이브러리 함수는 미리 컴파일되어 있으며 이러한 라이브러리 파일의 개체 코드는 '.lib'(또는 '.a') 확장자로 저장됩니다. 링커의 주요 작업은 라이브러리 파일의 개체 코드와 프로그램의 개체 코드를 결합하는 것입니다. 때때로 우리 프로그램이 다른 파일에 정의된 함수를 참조할 때 상황이 발생합니다. 그러면 링커가 여기서 매우 중요한 역할을 합니다. 이는 이러한 파일의 개체 코드를 우리 프로그램에 연결합니다. 따라서 링커의 역할은 프로그램의 개체 코드를 라이브러리 파일 및 기타 파일의 개체 코드와 연결하는 것이라고 결론을 내립니다. 링커의 출력은 실행 파일입니다. 실행 파일의 이름은 소스 파일과 동일하지만 확장자만 다릅니다. DOS에서는 실행 파일의 확장자가 '.exe'이고, UNIX에서는 실행 파일 이름이 'a.out'일 수 있습니다. 예를 들어 프로그램에서 printf() 함수를 사용하는 경우 링커는 관련 코드를 출력 파일에 추가합니다.

예를 통해 이해해 봅시다.

STS 다운로드

안녕하세요.c

 #include int main() { printf('Hello javaTpoint'); return 0; } 

이제 위 프로그램의 흐름도를 작성하겠습니다.

C의 컴파일 과정

위의 흐름도에서는 프로그램을 실행하기 위해 다음 단계를 수행합니다.

  • 먼저, 입력 파일, 즉 안녕하세요.c, 전처리기로 전달되고 전처리기는 소스 코드를 확장 소스 코드로 변환합니다. 확장된 소스 코드의 확장은 다음과 같습니다. 안녕하세요.i.
  • 확장된 소스 코드는 컴파일러로 전달되고, 컴파일러는 이 확장된 소스 코드를 어셈블리 코드로 변환합니다. 어셈블리 코드의 확장은 다음과 같습니다. 안녕하세요.
  • 그런 다음 이 어셈블리 코드는 어셈블러로 전송되어 어셈블리 코드를 개체 코드로 변환합니다.
  • 링커는 객체 코드를 생성한 후 실행 파일을 생성합니다. 그런 다음 로더는 실행을 위해 실행 파일을 로드합니다.