2015-01-07 3 views
0

C로 코딩 중이며 프로그램을 정리하고 깨끗하게 만들려고 main.c에서 모든 기능을 가져 와서 헤더 파일을 모두 포함하는 자신의 .c 파일에 넣습니다. main.c에 모든 .c 파일을 포함하는 것을 잊었습니다. 그리고 프로그램을 컴파일 할 때, 여전히 완벽하게 실행되었습니다! 이것이 어떻게 가능한지? 동일한 폴더에있는 .c 파일을 포함 할 필요가 없습니까? 어쨌든 .c 파일을 안전하게 포함해야합니까?필요한 .c 파일을 포함하지 않고 프로그램을 실행하는 방법은 무엇입니까?

+0

어떤 컴파일러입니까? 너는 어떻게 꾸미고 있니? 때때로 make 파일은 * .c와 같은 것을 지정할 수 있습니다. –

+0

포함하여 링크를 의미합니까? 그렇다면 필요한 모든 C 파일을 항상 링크해야합니다. include에 의해, 당신은'#include file.c'을 의미하고, 그렇지 않다면 다른 C 파일을 포함해서는 안됩니다. – wolfPack88

답변

0

원하는 수의 c 파일을 컴파일 타임에 생성 할 수 있습니다. 오브젝트 파일이 생성 된 다음 실행 파일 바이너리로 연결됩니다.

main.c의 c 파일을 포함하는 것은 가능하지만 다른 파일로 프로그램을 분할하는 적절한 방법이 아닙니다. 올바른 방법은 모든 파일을 Object Files라는 중간 언어로 repileantant로 컴파일 한 다음 링커 링크 그들 모두는 실행할 수있는 바이너리를 만들기 위해 togaether.

그래서 컴파일은 다음이

file1.c -> file1.o 
file2.c -> file2.o 
file3.c -> file3.o 
file4.c -> file4.o 

     . 
     . 
     . 
     . 

그리고 당신은 한 번에 컴파일러에 모든 C 파일을 전달할 수있는 모든 파일

file1.o file2.o file3.o file4.o ... -> executable-binary-file 

소요 연결 단계처럼 간다.

+0

아 컴파일하는 방법에 대한 아주 좋은 설명입니다. 그렇다면 파이썬과 같은 인터프리터 언어는 어떻게 될까요? – James4701

+0

@ James4701 해석 된 언어는 인터프리터를 실행하기 위해 인터프리터가 필요합니다. 파이썬은 파이썬이 스크립트를 더 빨리 실행할 수 있도록 .pyc 확장자를 가진 바이트 코드라는 파일을 생성하지만 해석 된 언어로 작성된 프로그램으로 원시 실행 가능 바이너리를 생성 할 수는 없습니다. –

0

님의 별도로, main.c의

C 컴파일러가 .o 인 파일로 각이 .c 파일을 컴파일에서 다른 .c 인 파일을 포함을 안하고 있습니다.

그리고 나서 결과 객체 파일을 다시 단일 실행 파일에 넣는 것이 링커의 임무입니다.

+0

감사합니다. 가능한 한 빨리이 답을 표시하겠습니다. – James4701

관련 문제