我试图编译一个ruby模块,并且我的编译器被阻塞了。我认为这可能与ruby.h中的一行有关:C下划线原型语法
void rb_check_type _((VALUE,int));
我从来没有见过这种_语法。这是什么意思?它会导致我的编译器(Visual Studio)出现问题吗?
我试图编译一个ruby模块,并且我的编译器被阻塞了。我认为这可能与ruby.h中的一行有关:C下划线原型语法
void rb_check_type _((VALUE,int));
我从来没有见过这种_语法。这是什么意思?它会导致我的编译器(Visual Studio)出现问题吗?
它看起来像一个名为'_'的宏的宏调用。它的双面包是赠品。通常只有在调用复杂的宏时才能看到这些宏,它们希望能够使用任意数量的参数生成函数调用。
因此,各种可能性似乎是:
我真的不能给你任何更多的建议,因为你没有给出关于你的编译器实际产生什么错误的任何细节。
这个宏在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。这意味着:
的解决方案,而双方越来越远,似乎都不清楚来自宏。 我还没有找到在我自己的代码中使用命名空间的方式来解决 this - 仍在尝试...