2017-04-19 8 views
0
내가 C로 작성된 파일 ( here)을 읽고 이해하려고 노력 중이 야

하지 (또는는 C++로 시작하는 인 경우), 나는 다음이 궁금 해요 :C/C++ 매크로의 인수는 암시 적으로 어떻게 처리됩니까? 많은 C를 알고

#define BEGIN yy_start = 1 + 2 * 

전화했을 때 이렇게 :

BEGIN(new_state) 

이 작동 중입니다. BEGIN은 매크로/자리 표시 자 설정 yy_start입니다. 그러나 전달 된 인수가 처리되는 방식에 대해서는 아무 것도 찾을 수 없으며 operands은 어디서나 가져 오지 않습니다.

질문 : 명시 적으로 처리되지 않은 경우 C/C++ 매크로에서 인수를 어떻게 처리합니까? 결과 코드가

yy_start = 1 + 2 *(new_state) 

그것은 사전에 수행을 할 수 있도록 매크로 시작하기

+0

이것은 C 언어로, 파일 확장명으로 알 수 있습니다 (C++은 * .cpp를 사용함). – Toby

+4

그냥'yy_start = 1 + 2 * (new_state)'로 바꾸면 되겠습니까? 그냥 곱셈일까요? –

+0

아, 알겠습니다. 설명 주셔서 감사합니다. 대답 해 주시면 확인하겠습니다. – frequent

답변

5

는 인수가 없습니다.

11

명시 적으로 처리되지 않은 인수는 C/C++ 매크로에서 어떻게 처리됩니까?

매크로가 인수로 선언되지 않으면 인수를 전혀 사용하지 않습니다. 실제로 C는 인수를 허용하는 매크로와 그렇지 않은 매크로를 명시 적으로 구별합니다. 특정 경우에, 객체와 같은 매크로로 BEGIN의 정의를 주어진 :

yy_start = 1 + 2 *(new_state) 

:

#define BEGIN yy_start = 1 + 2 * 

이 호출 ...

BEGIN(new_state) 

는 ...로 확장됩니다. 특히 매크로 이름 만 바뀝니다. 다음에 괄호로 묶인 토큰은 매크로 호출의 일부가 아니며 매크로 확장의 영향을받지 않습니다.