2010-04-21 10 views
1

루비 모듈을 컴파일 하려다가 컴파일러가 막혔습니다. 나는 그것이 ruby.h의 한 줄과 관련이있을 것이라고 생각한다 :C 프로토 타입 구문을 밑줄

void rb_check_type _((VALUE,int)); 

전에는 _이 구문을 본 적이 없다. 무슨 뜻이에요? 그것은 내 컴파일러 (Visual Studio)에 문제를 일으킬 수 있습니까?

답변

2

'_'매크로를 사용하여 매크로 호출과 비슷하게 보입니다. 그것의 두 배 parens는 공짜입니다. 일반적으로 임의의 수의 매개 변수로 함수 호출을 생성 할 수있는 복잡한 매크로를 호출 할 때만 볼 수 있습니다.

따라서, 여러 가지 가능성이있을 것 같다 :

  1. 을 매크로는 '_'호출 할 수 없습니다 뭔가 그 라인을 손상했다. 아마 rb_check_type_ 매크로의 정확한 이름입니다. 어쩌면 다른 것이있을 수 있습니다. 비슷한 전화를 찾아 그들이 어떻게 다른지 확인하십시오.
  2. 매크로는 실제로 '_'이고 어떤 이유로 정의되지 않습니다. 그것은 당신이 포함하는 헤더 파일에 의존합니다. 아마도 잊어 버렸을 것입니까?
  3. 매크로가 존재하며 실제로 '_'이지만 매크로가 잘못되어 있습니다. 컴파일러의 매크로 확장 출력을 보면이를 확인할 수 있습니다. 대부분의 컴파일러는이를 요청하는 방법을 가지고 있습니다.

실제로 컴파일러에서 어떤 오류가 발생했는지에 대해 자세히 알려주지 않았으므로 그 이상의 조언은 드릴 수 없습니다.

1

매크로는 실제로는 ruby.h (또는 ruby.h의 .h라고 부르기도합니다)에서 '_'라는 이름으로 지정됩니다. 다른 패키지가 같은 일을하는 것이 더 나쁩니 다. wxWidgets. g ++에서 3.3 일 수 :

#include "ruby.h" 
    #undef _ 
    #include "wx/filename.h" 

하고 있지만, 완전하게 정의를 해제 4.6.1 #undef를 ++ g에서 _의 wxWidget의 버전 (이 나를 위해 일을 일어) 사용하는 것이 컴파일 된 출력 _ 에도 불구하고 wxWidgets 앞에 #undef가 발생했습니다. 이는 : 나는 루비의 _ 오프 WX 년대 _ 켜지 않고 해제 할 수 없습니다

  1. 나는 루비의 _에 WX 기능

솔루션을 실행하는 방법을 깨지 않고는 양 당사자가 멀리받지 않고 불분명 보인다 떠날 수 없다 매크로에서. 내 코드에서 네임 스페이스를 사용하여이 코드를 주위에 가져 오는 방법을 찾지 못했습니다. 여전히 시도 중입니다 ...