我正在尝试编译ruby模块,我的编译器被阻塞了。我认为它可能与ruby.h中的一行有关:
void rb_check_type _((VALUE,int));
我之前从未见过这种_语法。这是什么意思?它会给我的编译器(Visual Studio)带来问题吗?
答案 0 :(得分:2)
它看起来像一个带有名为'_'的宏的宏调用。它是赠品的双重parens。您通常只能在调用复杂的宏时看到它们希望能够使用任意数量的参数生成函数调用。
因此,各种可能性似乎是:
我真的不能给你更多的建议,因为你没有详细说明你的编译器实际产生了什么错误。
答案 1 :(得分:1)
这个宏在ruby.h中真正命名为'_'(或者称为ruby.h的.h)。 更糟糕的是,其他包做同样的事情,例如wxWidgets的。 根据g ++ 3.3,可以:
#include "ruby.h"
#undef _
#include "wx/filename.h"
并且编译后的输出将使用wxWidget的_版本(发生了这种情况 为我工作),但在g ++ 4.6.1下#undef完全取消_ 尽管在wxWidgets包括之前发生了#undef。这意味着:
如果没有双方摆脱宏,解决方案似乎不清楚。 我还没有找到一种方法在我自己的代码中使用命名空间来绕过 这个 - 还在努力......