2012-02-14 2 views
0

처음으로 저는 간단한 프로그램을위한 실제 전문적인 C 코드를 작성하려고했습니다.여러 헤더 및 소스 파일을 통해 C에서 변수 및 함수를 구성하는 중 경고가 발생했습니다.

1) 헤더 파일 이름을 Essential_data.h로 만들고 그 안에 모든 함수와 전역 변수를 선언했습니다. 나는 .. 통근으로 내 모든 변수를 선언했다 그리고 모든 함수 선언은 일반적으로

예를 들어

을 만들었다 :

void test(); 
extern int x; 

2) 그럼 난 다른 헤더 파일 이름 main_data.h을 만들어 내 모든 글로벌 변수를 정의했다. 예 : int x;

3) 그런 다음 해당 함수의 정의가 들어있는 해당 소스 파일을 만들고 해당 전역 변수가 필요한 소스 파일에 main_data.h를 포함 시켰습니다.

모두입니다. 내가 프로젝트를 컴파일 할 때 후 나는

모든 기능에 대한 많은 경고를 가지고
내가 다음 않았다 기능 검사 [-Wimplicit 기능 선언 그 후 너무

암시 적 선언

1) Essential_data.h의 함수 선언 앞에 extern을 넣습니다. 예를 들어 대한 는 :

extern void test(); 

2)는 main_data.h에 나는 일반적으로 함수를 선언하고 내 Essential_data.h은 주요 기능에 있었다

void test(); 

두 번 썼다없이 다른 어디.

그런 다음 다시 컴파일하고 나중에 모든 경고가 사라집니다.

올바른 방법 이었습니까? 아니면 더 효율적으로 구성하는 다른 방법이 있습니까?

+0

마지막 문장에서 "작성 방법"은 무엇입니까? –

+0

올바른 방법은 내가 무엇을 했든간에 표준 프로그래밍인지 여부를 말하고 싶었습니다. 내 말은 직업이 헤더 및 소스 파일을 구성하는 방식입니까? – neo1691

답변

0

당신은해야한다 : 통근 선언 (함수와 객체)를 포함

  • 하나 개 이상의 .h 파일을. 이러한 파일은 해당 기호가 필요한 .c 파일에 포함되어야합니다. 당신은 (각 식별자가 정확히 한 번만 선언해야 ) 여러 선언은 함수를 정의하는

  • 하나 이상의 .c 파일이 당신의 예에서

개체를 안 :

/* essential_data.h */ 
void test(); 
extern int x; 

/* something.c */ 
#include "essential_data.h" 

int x; 
void test() 
{ 
    /* ... */ 
} 

/* main.c */ 
#include "essential_data.h" 

/* ... */ 
+0

나는 essential_data를 포함했다는 것을 제외하고는 정확히 같은 패턴을 가졌다.h는 주 파일에만 있습니다. – neo1691

+0

업데이트 : main_data.h에서 모든 extern 함수 선언을 삭제하고 함수의 소스 파일에 Essential_data.h를 포함 시켰습니다. 경고는 사라졌습니다 .. 감사합니다. cnicutar !! – neo1691