C_파일 은. h 파일 과. c 파일 총 결 을 포함 합 니 다.
많은 사람들 이 C 언어의 '파일 포함' 에 대해 낯 설 지 않다. 파일 포함 처 리 는 프로그램 개발 에서 우리 의 모듈 화 프로 그래 밍 에 큰 이익 을 가 져 다 줄 것 이다. 파일 포함 방법 을 통 해 프로그램의 각 기능 모듈 을 연결 시 키 는 것 은 모듈 화 프로 그래 밍 에서 매우 유리 한 수단 이다.
파일 포함 처리 란 원본 파일 에 파일 포함 명령 을 통 해 다른 원본 파일 의 내용 을 모두 포함 하 는 것 을 말 합 니 다.원본 파일 을 컴 파일 할 때 포 함 된 파일 과 함께 컴 파일 하여 대상 파일 을 생 성 합 니 다.
많은 사람들 이 초학 때 이것 에 대해 매우 어 지 럽 습 니 다. 어떻게 서 류 를 씁 니까?어떻게 포함 해야만 중 정 의 를 피 할 수 있 습 니까?등등 문제...
사실 이것 은 파일 에 포 함 된 기본 적 인 처리 방법 만 알 면 파일 에 대한 이해 와 응용 을 잘 할 수 있 습 니 다. 내 려 와 서 같이 보 겠 습 니 다.
파일 에 포 함 된 처리 방법:
우선 여러분 은 잘 알 아야 합 니 다.
(1) 처리 시간: 파일 포함 도 '\ #' 로 시작 합 니 다 (\ # include). 그러면 예비 프로세서 에 보 여 주 는 것 입 니 다. 즉, 파일 포함 은 컴 파일 예비 처리 단계 에서 처 리 됩 니 다.
(2) 처리 방법: 사전 처리 단계 에서 시스템 은 자동 으로 \ # include 명령 을 처리 합 니 다. 구체 적 인 방법 은 파일 을 포함 하 는 내용 을 포함 하 는 문장 (\ # include) 에 복사 하여 새로운 파일 을 얻 은 다음 에 이 새로운 파일 을 컴 파일 하 는 것 입 니 다.
이 두 가 지 를 잡 으 면 이 물건 은 어 려 운 것 이 없다.
일반적인 상황 에서 파일 은 두 가지 로 나 뉜 다. h 파일 과 c 파일 을 포함한다.
1. 물론 이 두 가지 상황 에 대해 서도 위 에서 말 한 방법 에 따라 처리한다.허허, 이 건 말 할 필요 가 없 을 거 야.
2. c 파일 을 포함 하 는 것 과 다 중 파일 프로그램 을 컴 파일 하 는 것 은 다르다. 다 중 파일 프로그램: 원본 파일 을 컴 파일 할 때 여러 파일 을 컴 파일 하고 연결 하여 실행 가능 한 파일 을 만 드 는 것 입 니 다. c 파일 포함: 위 에서 말 한 법칙 에 따 르 면 여러 파일 을 하나의 파일 로 합 쳐 컴 파일 하 는 것 입 니 다.
다음은 예 를 들 어 보 겠 습 니 다. (1). c 파일 포함:
     
     
     
     
      
      
      
       1: 
      
      
      
      //file1: main.c 
     
     
     
     
     
     
     
     
      
      
      
       2: #include 
     
     
     
     
     
     
     
     
      
      
      
       3: #include 
      
      
      
      "fun.c"
     
     
     
     
     
     
     
     
      
      
      
       4: 
      
      
      
      int main()
     
     
     
     
     
     
     
     
      
      
      
       5: {
     
     
     
     
     
     
     
     
      
      
      
       6:     
      
      
      
      int a=5,b=19;
     
     
     
     
     
     
     
     
      
      
      
       7:     c = a;    
     
     
     
     
     
     
     
     
      
      
      
       8:     sun(a,b);
     
     
     
     
     
     
     
     
      
      
      
       9:     printf(
      
      
      
      "c=%d
",c);
     
     
     
     
     
     
     
     
      
      
      
       10:     
      
      
      
      return 0;
     
     
     
     
     
     
     
     
      
      
      
       11: }
     
     
     
     
     
     
     
     
      
      
      
       12: //end of file1
     
     
     
        1: //file2: fun.c   2: int c=0;   3: void sun(int a, int b)   4: {   5:     printf("a+b=%d
",a+b);   6:     c=0;   7:     printf("c=%d
",c);   8: }   9: //end of file2     10:   이 예 는. c 파일 을 포함 하 는 방법 으로 이 루어 졌 다.
컴 파일 할 때, 직접 main. c 파일 을 컴 파일 합 니 다. 예비 처리 장 치 는 먼저 fun. c 파일 의 내용 을 main. c 에 복사 한 다음 에 새로운 main. c 를 컴 파일 합 니 다.
컴 파일 명령:
gcc main.c -o main
여기 서 fun. c 를 컴 파일 하지 않 았 지만 최종 main 실행 가능 프로그램 이 생 성 되 었 습 니 다.
명령 을 통 해 예비 처리 결 과 를 관찰 할 수도 있다.
컴 파일 명령: gcc - E main. c - o main. cpp 는 main. cpp 파일 끝 에 다음 코드 를 볼 수 있 습 니 다.
   1: //main.cpp      2: 931 # 2 "main.c" 2   3: 932 # 1 "fun.c" 1   4: 933 //     fun.c        5: 934 int c=0;   6: 935 void sun(int a, int b)   7: 936 {   8: 937  printf("a+b=%d
",a+b);   9: 938  c=0;  10: 939  printf("c=%d
",c);  11: 940 }   12:     //   main    13: 941 # 3 "main.c" 2  14: 942 int main()  15: 943 {   16: 944  int a=5,b=19;  17: 945  c = a;  18: 946  printf("c=%d
",c);  19: 947  sun(a,b);  20: 948  printf("c=%d
",c);  21: 949  return 0;  22: 950 }이 를 통 해 알 수 있 듯 이 fun. c 파일 의 내용 을 main 함수 에 추가 하기 전에 새로운 파일 을 컴 파일 하여 최종 실행 가능 한 프로그램 을 만 드 는 것 입 니 다.
(2) 다 중 파일 프로그램 컴 파일:
마찬가지 로 위의 예 입 니 다. main. c 의 "\ # include" fun. c "주석 을 지우 고" extern int c; "라 는 말 을 붙 입 니 다. c 변 수 는 다른 파일 (fun. c) 에서 정의 되 기 때 문 입 니 다.
   1: //file1:  main.c    2: #include    3: //#include "fun.c"  //      4: extern int c;        //        5: int main()   6: {   7:     int a=5,b=19;   8:     c = a;       9:     sun(a,b);  10:     printf("c=%d
",c);  11:     return 0;  12: }  13: //end of file1  14:    15:    16: //file2: fun.c  17: int c=0;  18: void sun(int a, int b)  19: {  20:     printf("a+b=%d
",a+b);  21:     c=0;  22:     printf("c=%d
",c);  23: }  24: //end of file2  이번에 도 위의 방법 으로 main. c 만 컴 파일 하면 오류 가 발생 합 니 다. 변수 c 와 함수 sun 이 main. c 에서 정의 되 지 않 았 기 때문에 컴 파일 할 때 fun. c 를 함께 컴 파일 해 야 합 니 다.
컴 파일 명령:
gcc -c main.c -o main.o #main. c 컴 파일 gcc -c fun.c -o fun.o #컴 파일 fun. c gcc main.o fun.o -o main #main. o fun. o 로 main 생 성
여기까지. c 파일 과 다 중 파일 프로그램 을 포함 한 본질 적 인 차 이 를 이해 하 셨 을 겁 니 다 ~ ~
자, 여러분 은 이 두 가지 방법의 장단 점 을 생각 하지 않 고 부족 한 점 만 적 었 습 니 다.
1. c 파일 을 포함 하 는 방법: '재정의' 가 생기 기 쉽다. 만약 에 한 프로젝트 에 여러 개의 파일 이 한 개 를 동시에 포함한다 면 이 포 함 된 파일 의 내용 은 여러 개의 파일 로 복사 되 고 이 파일 을 포함 하 는 모든 파일 에 포 함 된 변수 와 함 수 를 정의 하 는 것 과 같다. 그러면 링크 할 때 '재정의' 가 생 긴 다.잘못
2. 다 중 파일 을 분리 하여 컴 파일 하 는 방법: 이것 이 비교적 좋 습 니 다. '재 정의' 와 같은 문제 가 발생 하기 쉽 지 않 습 니 다. 이것 도 우리 가 가장 자주 사용 하 는 방법 입 니 다. 그러나 상기 예 에서 처럼 직접 사용 하 는 것 이 아니 라 '헤더 파일' 을 사용 하여 각. c 파일 을 연결 하 는 것 입 니 다.
위의 이 예 는 main. c 에 'extern int c' 라 는 성명 을 더 해 야 한 다 는 것 을 알 수 있 습 니 다. 포 함 된 파일 이 많 으 면?전역 변수 가 많 으 면?이것 괜찮아요?대답 은 긍정!방법 은 그것 에 게 머리 파일 을 쓰 는 것 이다.
다음은 헤더 파일 을 사용 하여 이 예 를 실현 하 는 방법 을 살 펴 보 겠 습 니 다.
     
     
     
     
      
      
      
       1: 
      
      
      
      //file1: main.c 
     
     
     
     
     
     
     
     
      
      
      
       2: #include 
     
     
     
     
     
     
     
     
      
      
      
       3: #include 
      
      
      
      "fun.h"       
      
      
      
      //fun.c   fun.h
     
     
     
     
     
     
     
     
      
      
      
       4: 
      
      
      
      //extern int c; //      
     
     
     
     
     
     
     
     
      
      
      
       5: 
      
      
      
      int main()
     
     
     
     
     
     
     
     
      
      
      
       6: {
     
     
     
     
     
     
     
     
      
      
      
       7:     
      
      
      
      int a=5,b=19;
     
     
     
     
     
     
     
     
      
      
      
       8:     c = a;    
     
     
     
     
     
     
     
     
      
      
      
       9:     sun(a,b);
     
     
     
     
     
     
     
     
      
      
      
       10:     printf(
      
      
      
      "c=%d
",c);
     
     
     
     
     
     
     
     
      
      
      
       11:     
      
      
      
      return 0;
     
     
     
     
     
     
     
     
      
      
      
       12: }
     
     
     
     
     
     
     
     
      
      
      
       13: //end of file1
     
     
     
     
     
     
     
     
      
      
      
       1:  
     
     
     
     
     
     
     
     
      
      
      
       2: 
      
      
      
      //file2: fun.c
     
     
     
     
     
     
     
     
      
      
      
       3: #include 
      
      
      
      "fun.h"
     
     
     
     
     
     
     
     
      
      
      
       4: 
      
      
      
      int c=0;                      
      
      
      
      //  c   
     
     
     
     
     
     
     
     
      
      
      
       5: 
      
      
      
      void sun(
      
      
      
      int a, 
      
      
      
      int b)        
      
      
      
      //  sun()   
     
     
     
     
     
     
     
     
      
      
      
       6: {
     
     
     
     
     
     
     
     
      
      
      
       7:     printf(
      
      
      
      "a+b=%d
",a+b);
     
     
     
     
     
     
     
     
      
      
      
       8:     c=0;
     
     
     
     
     
     
     
     
      
      
      
       9:     printf(
      
      
      
      "c=%d
",c);
     
     
     
     
     
     
     
     
      
      
      
       10: }
     
     
     
     
     
     
     
     
      
      
      
       11: 
      
      
      
      //end of file2 
     
     
     
     
     
     
     
     
      
      
      
       1: 
      
      
      
      //file3: fun.h 
     
     
     
     
     
     
     
     
      
      
      
       2: 
      
      
      
      extern 
      
      
      
      int c;             
      
      
      
      // c        
     
     
     
     
     
     
     
     
      
      
      
       3: 
      
      
      
      void sun(
      
      
      
      int a, 
      
      
      
      int b);   
      
      
      
      //sun()     
     
     
     
     
     
     
     
     
      
      
      
       4: 
      
      
      
      //end of file3
     
     
     
     이렇게 다시 한 번 보 겠 습 니 다. fun. c 에서 정의 할 함수 나 변 수 를 사용 할 파일 에 fun. h 파일 만 포함 하면 됩 니 다. 그 렇 죠?허허, 당연 하지...
사전 처 리 를 할 때 fun. h 의 내용 을 포함 하 는 파일 에 복사 합 니 다. 복 사 된 내용 은 이름 일 뿐 정의 가 아 닙 니 다. 따라서 복 사 된 것 이 아무리 많아 도 '재 정의' 오류 가 발생 하지 않 습 니 다.
허허, 그래, 바로 이렇다. 이것 이 바로 첫 번 째 서류 가 우리 에 게 다시 오 는 좋 은 점 이다.
앞에서 말 한 헤더 파일 의 방법 도 모듈 화 프로 그래 밍 에서 매우 유리 한 수단 이다.
같은 기능 을 c 파일 에 기록 하면 그들 을 하나의 모듈 로 그 을 수 있 고, 또 대응 하 는. h 파일 을 써 서 설명 할 수 있 습 니 다.이렇게 한 후에 이 모듈 을 사용 할 때 이 두 파일 을 프로젝트 에 추가 하고 모듈 내 함수 나 변 수 를 사용 할 파일 에. h 파일 을 포함 하면 됩 니 다.
실제 적 인 예 를 들 어 싱글 칩 마이크로컴퓨터, ARM 또는 다른 내장 형 개발 에서 모든 플랫폼 자체 에 다양한 하드웨어 모듈 이 있 을 수 있 습 니 다. 사용 할 때 해당 하 는 드라이버 를 써 야 합 니 다. 그러면 각 하드웨어 모듈 의 드라이버 를 하나의 모듈 로 할 수 있 습 니 다 (예 를 들 어 lcd 구동 은 대응 하 는 lcd. c 와 lcd. h, IIC 구동 은 I2C. c 와 I2C. h 등).특정한 모듈 에 구체 적 으로 사용 할 때 해당 하 는 c 와 h 파일 을 프로젝트 에 추가 하고 파일 에 맞 는. h 파일 을 포함 하면 됩 니 다.
그래서 헤더 파일 에 대한 쓰기 개인.
다음 과 같은 몇 가 지 를 요약 한다.
(1) 대응 하 는. c 파일 에 변수, 함수 의 정의 (2) 에 대응 하 는. h 파일 에 변수, 함수 의 성명 (3) 데이터 형식의 정의 와 매크로 정의 가 있 으 면 쓴 헤더 파일 (. h) 에 (4) 헤더 파일 에 반드시 \ # ifndef... \ # define... \ # endif 와 같은 중복 방지 문구 (5) 모듈 의. c 파일 에 자신의. h 파일 이 포함 되 어 있 는 것 을 잊 지 마 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.