저는 사용자를위한 정적 라이브러리로 끝나고 내 벡터 수학 인터페이스의 인라인을 통해 이익을 얻고 싶은 작은 C 수학 라이브러리를 다시 작성하고 있습니다.정적 라이브러리를 올바르게 인라인하는 법
나는 다음과 같습니다
[mymath.h]
...
...
extern float clampf(float v, float min, float max);
...
...
[mymath.c]
inline float clampf(float v, float min, float max)
{
if(v < min) v = min;
if(v > max) v = max;
return v;
}
내 라이브러리는 정적하고 난 단지에 갈거야 때문에 사용자에게 .h
(및 .lib
)을 제공하면 컴파일시 해당 프로그램에 clampf
함수가 인라인됩니까?
올바른 일을하고 있지만 extern
을 .h
에, .c
에 인라인으로 선언하고 있습니까?
나는 당신의 대답이 틀렸다는 것을 확신합니다. 'inline' 함수가 아닌'static inline' 함수를 정의하면 함수가 여러 컴파일 단위로 사용되면 연결이 실패합니다. GCC 4.6 및 -std = c99로 테스트되었습니다. 함수 정의'extern inline'을 선언해도 작동하지만 GCC 확장입니다. – kay
@kay : 전체 답변을 읽어보십시오. 번역 단위의 함수에 대한 'extern'선언을 어딘가에 추가해야합니다 (예 : 헤더가 아님). 그러면 해당 모듈에서 비 인라인 버전이 생성됩니다. C99 표준을 보거나 http://www.greenend.org.uk/rjk/tech/inline.html을 읽으십시오. –
저는 확신합니다 :-) – kay