3
#ifdef가있는 C 헤더 파일 선언과 변수 및 함수 앞에 extern의 의미를 알고 있습니다.함수가 C 헤더 파일에서 두 번 선언되었습니다.
/* "lib.h" */
#ifndef LIB_H_
#define LIB_H_
#ifdef LIB_C
void function1();
/* ... */
#else
extern void function1();
/* ... */
#endif
#endif /* LIB_H_ */
그리고 또한 내가 상응하는 C 소스 파일있어 : 나는 그래서 여기
/* lib.c */
#define LIB_C
#include "lib.h"
void function1()
{
/* ... */
}
/* ... */
을하고 그러나 최근에 나는 다음과 같은 구조와 임베디드 장치에 대한 타사 라이브러리를 가지고 조금 혼란스러워. 이런 식으로 헤더에서 모든 함수를 두 번 선언하는 이유는 무엇입니까?
음 ... 재미 있습니다 .... IIRC, 함수는 기본적으로 외부 링크입니다. –
가능한 대용량의 [C++ Extern 함수] (http://stackoverflow.com/questions/11712707/extern-functions-in-c-vs-c) – Baldrick
일반적으로 이와 같은 코드는 위험합니다. 즉, 두 섹션의 어딘가에는 '라이브러리 내부'와 '라이브러리 외부'의 일부 기능 사이에 중요한 차이가있을뿐입니다 (단순히 '외부'의 존재 또는 부재가 아님). 이는 '내부'코드가 '외부'코드 사용과 동일한 정의를 사용하므로 두 코드가 동기화된다는 것을 보장하기 때문에 문제가됩니다. 따라서 차이가있을 경우 컴파일러가 진단하지 못하는 문제가 발생할 수 있습니다. 선언은 프로토 타입이 아닙니다. 불특정 인수 목록 (생략 부호 없음)이있는 함수 일뿐입니다. –