그 기능이 필요합니다 lock()
되려고 static
.
static void lock() {..}
그 이유는 그 기능이 있습니다 static
"번역 장치"외부에서는 보이지 않습니다. 다른 (아마도 잘못) 단어에서 정적 함수는 다음과 같습니다. 사적인 *.c 파일에. 따라서 현재와 같이 연결 단계에서 연결 오류를 일으키지 않습니다.
문제
여러 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(){}
.
그렇지 않으면 기능 이름이 프로그램 전체에 표시되며 이름 충돌이 발생합니다 (기능 프로토 타입 없이도 여전히 호출 할 수는 없지만).