2017-01-01 12 views
2

에서 명령을 제거 할 수 있습니다.내가 함수를 정의 할 때 가끔</p> <pre><code>static inline void myfunc(...) </code></pre> <p>를 사용하는 C 라이브러리를하고 있어요 처리기 명령을 찾고하는 코드

"정적 인라인"을 지원하지 않는 오래된 C 컴파일러로 이식하려고합니다. 이것은 bcc - Bruce의 C 컴파일러입니다.

나는이 헤더 파일을 포함하는 모든 프로그램에서

void 

static inline void 

을 대체하는 헤더 파일에 명령을 사용할 수 있습니까?

+3

빈 정의를 추가 할 수 있다고 생각합니다. #define void. –

+0

'inline' 키워드가 아닌'void' 키워드를 재정의 하시겠습니까? 또한 * 조건부 컴파일 *을 검색하여 읽으십시오. –

+0

죄송합니다. 오타였습니다. "static inline void"를 "void"로 바꾸고 싶습니다. – Georg

답변

5

특정 기능을 지원하지 않는 컴파일러를 대상으로해야하는 경우 매크로로 코드를 수정하는 대신 코드에서 매크로를 사용하는 것이 일반적입니다. 이 상황에서

당신은 컴파일러에 의존하는 방식으로 STATIC_INLINE 매크로를 정의하고, 다음과 같이 사용할 수 있습니다 :

#ifdef BCC_COMPILER 
#define STATIC_INLINE 
#else 
#define STATIC_INLINE static inline 
#endif 
... 
STATIC_INLINE void myfunc(...) 
+0

이 코드는 작동하지만 이미 많은 ifdef가 있습니다. #define 커맨드 등으로 한 곳에서 이것을 정의하는 것이 더 짧기를 바랐습니다. – Georg

+0

이제이 코드를 헤더 파일에 넣을 수 있습니다. "정적 인라인"을 빈 문자열로 바꾸기 위해 전 처리기를 사용할 수 있습니까? 그렇다면 모든 프로그램 코드를 변경할 필요가 없습니다. – Georg

+1

@Georg 불행히도, 전처리 기는 서로 옆에 나타나는 토큰 쌍이 아니라 단일 토큰을 대체 할 수 있습니다. 그것이 내가 본 적이있는 많은 라이브러리가이 트릭을 사용하는 이유입니다. 나머지 코드는 읽기 쉽지 않습니다. – dasblinkenlight

1

는 도움을 당신에게 모두에게 대단히 감사합니다.

#define inline 

은 분명히 숨은 static void하지만 static inline void을 허용 않습니다 나는 BLUEPIXY 그의 comment에 나를 위해 일한 답을 준 것으로보고있다.

+1

더 간단합니다 Bcc는 인라인 함수를 지원하지 않습니다. C90 컴파일러에서도'static '과'void'에 대한 지원이 필요합니다. C99에 인라인이 추가되었습니다. –