문제

여러 C 소스 파일에서 동일한 기능을 가질 수없는 이유를 찾는 데 어려움을 겪고 있습니다. 나는 항상 헤더 파일에서 선언되지 않는 한 다른 소스 파일의 함수에 액세스 할 수 없다고 생각했습니다.

다음이 있다고 가정하자.

main.c-> 포함 된 스레드 1.H & Thread2.h 포함

thread1.h-> dec

thread1.c-> void * resure () {} 정의하고 void lock () {}을 정의합니다.

Thread2.h->는 void * thread2 ()를 선언합니다.

Thread2.c-> void * stread2 () {}를 정의하고 void lock () {}를 정의합니다.

이제 GCC는 내가 그렇게 할 수 없다고 말합니다!

GCC -PTHREAD -WALL -O EXECUTABLE MAIN.C THREAD1.C THREAD2.C

오류 : '잠금'의 다중 정의

그래서 지금 내 질문은 다음과 같습니다.내가 원하는 것을 어떻게 달성 할 수 있습니까?

나는 이것이 불가능하다고 생각하지 않습니다. 그렇지 않으면 모든 C 라이브러리 내에서 사용 가능한 모든 C 소스 코드는 고유해야합니다. (아니, 말이되지 않겠습니까?)

그래서 나는 약 3 시간 전에 해결책이 있어야한다고 생각했습니다. 나는 여기서 뭔가를 놓치고 있어야한다.

글쎄, 나는 그것을 인터넷 검색을 시도했지만 ... 어떻게 든 내 Google 기술이 이번에는 도움이되지 않았다. 실제로 이것을 할 방법이 없습니까? 아니면 내가 그것을 찾기 위해 바보 같은가?

미리 감사드립니다.

리프

도움이 되었습니까?

해결책

그 기능이 필요합니다 lock() 되려고 static.

static void lock() {..}

그 이유는 그 기능이 있습니다 static "번역 장치"외부에서는 보이지 않습니다. 다른 (아마도 잘못) 단어에서 정적 함수는 다음과 같습니다. 사적인 *.c 파일에. 따라서 현재와 같이 연결 단계에서 연결 오류를 일으키지 않습니다.

다른 팁

잠금을 다음과 같이 선언해야합니다 static void lock(){}.

그렇지 않으면 기능 이름이 프로그램 전체에 표시되며 이름 충돌이 발생합니다 (기능 프로토 타입 없이도 여전히 호출 할 수는 없지만).

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