2014-06-09 2 views
1

Unreal Engine 4의 소스 코드에서이를 발견했으며이를 인식하지 못했습니다. 그것의 구체적인 예는 다음과 같습니다매크로를 정의 할 때`(...) '의 의미는 무엇입니까?

#undef UCLASS 

#define UCLASS(...) \ 
ARadialForceActor_EVENTPARM 

나는 비교적 새로운 프로그래머와 매크로 이런 종류의 나에게 익숙 해요. 내 생각에 함수의 모든 오버로드 된 버전 UCLASS (즉, 매개 변수의 유형 및 개수에 관계없이 UCLASS이라는 함수의 모든 인스턴스)을 취하고 변수 ARadialForceActor_EVENTPARM으로 바꾸는 매크로를 정의하는 것으로 추정됩니다. 그 맞습니까? 그렇지 않다면 누구나 그것이 무엇을 의미하는지 알고 있습니까? 이것을 테스트하기 위해 코드 스 니펫을 작성하려했지만 error: "." may not appear in macro parameter list을 반환했습니다. 나는 경우에 나는, 매크로에 대한 옳은 사람이 지적 할 수 있다면 나는 내 코드에서 잘못된 곳이 경우에 나는 그것을 감사하겠습니다, 다음을 포함합니다 :

#include <iostream> 

#define foo(. . .) bar 

using namespace std; 

int foo() {cout <<54321<<endl;} 

int main() 
{ bar=12345; 
    cout<<bar<<endl; 

    return 0; 
} 
+0

[variaidic 매크로] (http://en.cppreference.com/w/cpp/preprocessor/replace)입니다. C++ 11에서만 작동합니다. – chris

+1

왜 공백을 추가 했습니까? –

+0

@ 은퇴 한 닌자 - 아, 그래, 오타입니다. 나는 양쪽 모두를 시도했는데 어느 쪽의 방법으로도 같은 에러를 발생시킨다. –

답변

1

#define foo(...) bar의 의미 당신의 추측 맞다. 귀하의 오류는 . . ....이 같다고 생각합니다. 그들은 그렇지 않습니다. ...은 점 사이에 공백없이 작성해야합니다. 내가 읽을 수있는 프로그램을 수정하는 경우

#include <iostream> 

#define foo(...) bar 

using std::cout; 

int foo() 
{ 
    cout << 54321 << '\n'; 
} 

int main() 
{ 
    bar = 12345; 
    cout << bar << '\n'; 
    return 0; 
} 

(다른 문체 수정을주의하시기 바랍니다; 코드의 미래의 독자가 당신을 감사합니다)

그때 내가 bar로 대체 된 foo()과 일치하는 메시지를 봤습니다 함수 정의에, 마치 당신이 할 수있는 전처리를 알려줍니다 어떤 사실이다

int bar 
{ 
    cout << 54321 << '\n'; 
} 

을 작성했다. (전처리 기는 항상 그렇듯이 적절한 언어 구문을 이해하지 못합니다.)

+0

그래서 Zack의 코멘트 바로 전에 공백을 알아 냈습니다. 이제 은퇴 한 닌자가 말하는 것을 이해합니다. 많은 빠른 응답 모두를 가져 주셔서 감사합니다! –

0
#define FOO(...) 

이것은 매크로가 가변 인수 수를 허용 할 수 있음을 의미합니다. 자세한 내용은 here을 참조하십시오.

관련 문제