2012-06-15 3 views
4

일부 Bison 코드에서 다음 줄은 무엇을 의미합니까?C에서이 코드의 의미는 무엇입니까?

#define YY_DECL extern "C" int yylex(); 

나는 #define 명령을 알고 있지만 전체 명령을 이해할 수 없습니다.

+1

'': '''이 줄 끝 부분에 있어야합니까? –

+0

필자는':'를'; '로 바꾸었지만 세미콜론도 없기 때문에 더 일반적으로 쓰일 수 있습니다. 그래서'YYDECL;'이라고 쓰면 쓸데없는 세미콜론이 없습니다 사전 처리 된 코드에서 –

답변

6

그것은 YY_DECL

extern "C" int yylex(); 

이 실제로 C++, C하지되는 확장되도록하는 수단; 이 파일을 C++ 컴파일러로 컴파일 할 때 함수을 컴파일해야 C 함수가 문제없이 호출 할 수 있습니다.

C++로 프로그래밍하지 않으면이 문제는 대부분 당신과 관련이 없지만 C++와 호환되도록하는 라이브러리의 경우 C 헤더 파일에서 유사한 선언이 발생할 수 있습니다. C와 C++는 하나의 프로그램에서 혼합 될 수 있지만 함수가 잘 작동하도록 선언문이 필요합니다.

아마도 #ifdef __cplusplus이이 #define 주위에 있습니다. 이것은 C++ 컴파일러에 의한 컴파일을 나타내는 데 사용되는 특별한 매크로입니다.

2

#define - 전처리 기용 새 변수를 선언하는 전 처리기 지시문입니다. 그러나 당신은 그것을 알고 있습니다.

YY_DECL - 변수의 이름.

extern "C" - 다음 코드가 순수한 C임을 컴파일러에 알립니다. C와 C++ 사이에는 많은 차이점이 있으며 일반적으로 C와 C++ 코드를 섞을 수 없습니다. 이를 선언에 포함 시키면 C++에서 C를 사용할 수 있습니다. 편집 :이 코드는 실제로 순수한 C 일 필요는 없지만 그렇게 링크됩니다. 그러나 가장 일반적인 사용 패턴은 C++을 C++과 호환되도록 만드는 것입니다. @larsmans에게 감사를 표합니다.

int yylex() - 정의 파라미터의 개수 및 반환형 int

으로 yylex라는 함수 선언 그래서 전체 명령 처리기 변수에 C 함수 선언을 할당한다.

+3

'extern "C"'는 "순수 C"를 선언하지 않고 C 링키지 *만을 선언합니다. C++ 컴파일러에 관한 한, 함수 본문은 임의의 C++ 기능을 사용할 수 있습니다. –

3
#define YY_DECL extern "C" int yylex(); 

정의 매크로 YY_DECL하는 C++ 프로그램 내부에 'C'링크가있는 기능 yylex의 선언에 대해 서 인수를 복용하지하고 int를 반환.

관련 문제