문제

내가 사용하는 모든 일을 내 코딩에서 한 C 파일입니다.그러나 나는 프로젝트에서 작업하기에 충분히 큰가 비실용적이다.었#포함하여 그들을 함께 하지만 난로 실행하는 경우 나#일부를 포함하여 파일을 여러 번,etc.내가 들었습니다.h 파일이 있지만 나는 무엇인지 자신의 기능을(또는 이유는 2 개의 파일이 더 나은 1)입니다.

어떤 전략을 사용해야 하는 조직 내 코드는?그것은 별도의"공개"기능"에서 민간"사람을 위해 특정 파일입니까?

질문에 침전물이 나오.은 차입니다.h 파일을 참조하지 않 차입니다.c 파일입니다.는 컴파일러가"알고있다"하는 것입니다.서 파일은 해당하는.c 요?

도움이 되었습니까?

해결책

해야 합니다.서 파일 인터페이스 파일 귀하의.c 파일입니다.매.c 파일을 나타냅 모듈과 일정 금액의 기능이 있습니다.는 경우 기능을 지지 않습니다.c 파일을 사용하여 다른 모듈이(즉니다.c 파일)함수 프로토 타입니다.서 인터페이스 파일입니다.을 포함하여 인터페이스 파일에서 당신의 원래 모듈을 사용합니다.c 파일을 매니다.c 파일을 필요 기능에서,당신은 이 기능을 사용할 수 있는 다른 모듈을 사용합니다.

만 필요한 경우 함수에서 확실합니다.c 파일(다른 모든 모듈)선언하고 그 범위를 정적입니다.이것들만 호출할 수 있습니다 내에서 c 파일을 정의합니다.

한 변수를 사용되는 여러 모듈이 있습니다.들 헤더에 파일을 있는 그들은 로 표시된 키워드'extern'.참고:기능 키워드'extern'은 선택사항입니다.기능 항상으로 간주'extern'.

포함한 경비에는 헤더 파일이 도움을 포함하지 않기로 동일한 헤더 파일이 여러 번 나옵니다.

예를 들어:

모듈 1.c:

    #include "Module1.h"

    static void MyLocalFunction(void);
    static unsigned int MyLocalVariable;    
    unsigned int MyExternVariable;

    void MyExternFunction(void)
    {
        MyLocalVariable = 1u;       

        /* Do something */

        MyLocalFunction();
    }

    static void MyLocalFunction(void)
    {
      /* Do something */

      MyExternVariable = 2u;
    }

모듈 1.h:

    #ifndef __MODULE1.H
    #define __MODULE1.H

    extern unsigned int MyExternVariable;

    void MyExternFunction(void);      

    #endif

Module2.c

    #include "Module.1.h"

    static void MyLocalFunction(void);

    static void MyLocalFunction(void)
    {
      MyExternVariable = 1u;
      MyExternFunction();
    }

다른 팁

만들려고 각.c 에 초점의 특정 지역 기능이 있습니다.를 사용하여 수 있습니다.********h 파일을 선언하는 사람들 기능입니다.

각.h 파일에 있어야'헤더'가 주변의 콘텐츠입니다.예를 들어:

#ifndef ACCOUNTS_H
#define ACCOUNTS_H
....
#endif

는 방법을 포함할 수 있습니다"accounts.h"많은 시간으로,당신이 원하는 첫 번째 시간에서 볼 수 있는 특정 컴파일 단위로 가져옵니다.

컴파일러

당신이 볼 수 있는 예의는 C 모듈에서' 이 항목 -참고 있는 두 파일의 헤더 티.에서,코드는 차입니다.c.당신이 선언하는 모든 공공 장 정의하는 변수,함수 프로토 타입하려는 다른 프로그램에 액세스하에서 헤더가 있습니다.에서 주요 프로젝트를#포함하고 있는 코드를 액세스할 수 있습니다 기능과 변수의 차 모듈에서 설명하는 헤더가 있습니다.

그것은 좀 더 복잡합니다.당신은 Visual Studio 를 사용하고 많은 다른 Ide 는 관리 구축을 위해 당신을 무시,이분은 그들이 돌을 컴파일하고 연결하는 개체입니다.

링커

를 컴파일할 때 두 가지 별도의 C 파일을 컴파일러에서 생산하는 개별적 개체 파일 그렇습니다.c 이 됩니다.o 마련되어 있습니다.c 된 차입니다.o.링커의 작업에서 보는 것입니다 모든 오브젝트파일을(당신의 주요.o 마련되어 있습니다.o),과 일치 참조-그래서 당신이 전화를 차 함수에서 주요 링커에서 수정되는 통화도 그것이 실제적으로 통화의 오른쪽에서 기능 차입니다.링커는 실행 파일을 생성.

좋은 튜토리얼 으로가 더 깊이 이 주제에 포함하여,범위 및 기타 문제가 실행하겠습니다.

행운을 빕니다!

-Adam

의 몇 가지 간단한 규칙을 시작:

  1. 그 선언을 원하는"공공"으로 헤더 파일에 대한 구현 C 파일을 만들 수 있습니다.
  2. 만#include 헤더에 파일을 C 파일을 구현하기 위해 필요한 C 파일입니다.
  3. 포함한 헤더 파일의 헤더 파일에서만 필요한 경우에는 선언을 내에는 헤더 파일.

  4. 를 사용하여 포함한 경비서 설명한 방법에 의해 안드레는 사용 #pragma 면 컴파일러 지원(는 것--때로는 더 효율적으로)

당신에 응답하는 추가적인 질문:

질문에 침전물이 나오.이 차입니다.h 파일을 참조하지 않 차입니다.c 파일입니다.는 컴파일러가"알고있다" 는 것입니다.서 파일은 해당하는 .c 요?

컴파일러가지 주로 관련된 헤더 파일이 있습니다.각 호출의 컴파일러를 컴파일한 원본(.c)파일 객체로(.o)파일이 들어 있습니다.뒤에(i.e에 make 파일 또는 프로젝트 파일)명령 라인에 해당하는 이가 생성되:

compiler --options tea.c

원본 파일 #includes 는 모든 헤더 파일을 리소스에 대한 참조는 어떻게 컴파일러가 발견한 헤더 파일이 있습니다.

(나는 광을 내는 일부를 통해 여기에 세부 사항.가에 대해 배울 수있는 많은 건물 C 프로젝트입니다.)

뿐만 아니라는 답변 공급상,하나의 작용의 부목을 대는 것은 당신의 코드로듈(별도의 파일)는 경우 당신은 어떤 변수를 제한할 수 있습니다 그들의 범위는 하나의 모듈을 사용해 핵심어는'정전'.(당신은 또한이 적용 가능).이에 사용되는'정전'은 다른 그것의 사용에서 내부 기능이 있습니다.

당신의 질문에 그것을 명확하지 않은 정말로 많은 심각한 개발이다.일반적인 경우에는 코드는 일반적으로 너무 커서 하나로 파일입니다.좋은 규칙에해야한다는 것입니다 분리 기능을 논리 단위로(.c 파일)그리고 각각의 파일을 포함해야 더 이상 당신은 쉽게 저장할 수 있습에서 당신의 머리에 하나는 시간입니다.

지정된 소프트웨어 제품은 일반적으로 다음을 포함한 출력에서 많은 다릅니다.c 파일이 있습니다.어떻게 이것은 일반적으로 수행하는 컴파일러에서 생산하는 수의 오브젝트 파일에서(유닉스 시스템".o"파일,VC 를 생성합니다.obj files).그것은 목적으로의"링"를 작성한 오브젝트 파일로 출력(또는 공유 라이브러리는 실행 가능).

일반적으로 구현(.c)파일을 포함하는 실제 실행 코드하는 동안,헤더파일(.서)가 있는 선언의 공공 기능에서 그 구현 파일이 있습니다.할 수 있는 아주 쉽게 더 헤더 파일이 있는 것보다 구현 파일,그리고 때로는 헤더 파일을 포함할 수 있는 인라인 코드뿐만 아니라.

그것은 일반적으로 매우 특이한 구현에 대한 파일을 포함됩니다.는 것이 좋습을 보장하기 위해 각 구현에 파일을 구분의 문제는 다른 파일이 있습니다.

권하고 싶 다운로드 소스를 리눅스 커널이다.그것은 매우 거대하는 C 프로그램,하지만 잘 조직되어 별도의 영역으로의 기능이 있습니다.

니다.h 파일을 사용해야를 정의 프로토타입의 기능입니다.이것은 필요한 그래서 당신을 포함할 수 있는 프로토타입에 필요 C-지 않고 파일을 선언하는 모든 함수해야 하는 모든 파일 하나에.

예를 들어,당신 #include <stdio.h>, 이 제공에 대한 프로토타입 printf 및 기타 IO 기능입니다.기호 이러한 기능은 정상적으로 로드하여 컴파일러 기본적으로 합니다.당신이 볼 수 있는 시스템이다.h 파일에서는/usr/include 에 관심이 있다면 정상적인어과 관련된 이러한 파일이 있습니다.

너만을 쓰는 사소한 응용 프로그램으로 많은 기능,그것은 정말 필요한 모듈화 하는 모든 것을 논리 그룹으로의 절차가 있습니다.그러나,있을 개발할 필요가 큰 시스템에,당신은 것을 지불해야 할 몇 가지 고려하는 곳으로 정의 각각의 기능이 있다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top