2013-10-16 4 views
1

안녕하세요. 저는 .c 파일간에 글로벌 변수를 공유하는 방법을 궁금합니다.
코드를 추가하려고하지만 오류가 발생합니다..c 파일간에 글로벌 변수 공유

TEST.C 파일

#include <stdio.h> 

int max = 50; 
int main() 
{ 
    printf("max %d", max); // result max 50 
} 

pass.h

extern int max; 

passed.c

#include <stdio.h> 
#include "pass.h" 

max; 

int main() 
{  
    printf("pass %d \n", max); 

    return 0; 
} 

내가 passed.c를 컴파일 할 때하지만 오류가 따라야 얻을

Undefined symbols for architecture x86_64: 
"_max", referenced from: 
    _main in passed-iOMugx.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

아무도 도와 줄 수 있습니까? 정말 고맙습니다.

+0

두 개의 main() 함수가 있음을 실제로 의미합니까? –

+0

왜 두 가지 주요 기능이 있습니까? 그들은 프로그램을 분리합니까 아니면 하나의 프로그램으로 함께 연결될 것입니까? 그들이 하나의 프로그램에서 함께 링크되어 있다면 그것은 최대에 대해 불평해서는 안됩니다 - 그것은 중복되는 주요 기능에 대해 불평해야합니다. –

+0

예, [다른 .c 파일간에 변수를 공유하는 방법은 무엇입니까?] ( –

답변

1

변수를 헤더 파일에 선언 할 수 있습니다 (예 : declareGlobal.h에서 가정 해 봅시다.

//declareGlobal.h 
extern int max; 

그런 다음 하나의 파일에만 변수를 정의해야합니다. test.c.라고 해봅시다. 변수가 선언 된 위치의 헤더 파일을 포함해야합니다. 이 경우, declareGlobal.c

//test.c 
#include "declareGlobal.h" 
int max = 50; 

당신은 당신이 그것을 사용하려는 경우, 예를 들어이 (즉 declareGlobal.c)를 선언있어 헤더 파일을 포함해야합니다 모든 파일 -이 변수를 사용할 수 있습니다 passed.c에서 다음을 수행 할 수 있습니다.

//passed.c 
#include <stdio.h> 
#include "declareGlobal.h" 
#include "test.c" 
int main() 
{ 
printf("pass %d \n", max); 
return 0; 
} 
+0

'#include "declareGlobal.c"'- 그냥 **하지 마라.** –

+0

@ H2CO3 실제로'declareGlobal.h '를 의미했습니다. – Subzero

+0

그럼 아마도 고쳐 주겠습니까? –

2

문제는 두 개의 프로그램이 있고 변수 (데이터와 같은)를 프로그램간에 단순히 공유 할 수 없다는 것입니다.

shared memory 및 기타 inter-process communication 방법에 대해 읽어보십시오.


프로그램을 가지고 있고, 다른 파일에 정의 된 변수를 사용하려면 다른 한편으로는, 당신은 여전히 ​​잘못하고있는 경우. 단일 프로그램에는 main 함수 하나만있을 수 있으므로 소스 파일 중 하나에서 main 함수를 제거하십시오. 또한 pass.c에서 표현 max;은 아무 것도하지 않으므로 필요하지 않습니다. 컴파일 할 때

그런 다음 위의 명령 후

$ clang -Wall -g test.c pass.c -o my_program 

처럼, 두 파일을 모두 통과, 당신은 (희망) my_program라는 실행 프로그램이있을 것이다.