C/CPP 用于处理一个方法的多个版本的宏或预处理器
C/CPP Macro or a pre processor to handle multiple versions of a method
如何在我的 node
addon
中跨多个版本的节点进行编译时处理方法的多个版本。例如:node
版本 0.10*
的 uv_inet_pton
和 uv_inet_pton
不同于 0.12.*
。 return 类型在这些版本中有所不同。我可以通过定义宏或预处理器来处理这种情况吗?
0.10中的签名是:
typedef struct uv_err_s uv_err_t;
uv_err_t uv_inet_pton(int af, const char* src, void* dst);
struct uv_err_s {
/* read-only */
/* MY ADDITION:
uv_err_code is an enum here, and 0 means OK.
*/
uv_err_code code;
/* private */
int sys_errno_;
};
所以对这个函数的调用 return 是一个结构,它有一个 code
字段,它指定错误,0 表示成功。
至于newer versions,return类型已经改变:
UV_EXTERN int uv_inet_pton(int af, const char* src, void* dst);
因此,使用 newer and older 版本中提供的版本信息,您可以推断出您正在编译的版本。这些链接适用于 0.10
和 1.0x
,但您也可以在 0.12
中获得类似信息。
如果函数return是int,0表示成功,其他值表示失败,则需要使用下面提供的函数:
int my_inet_pton(int af, const char* src, void* dst)
{
#ifdef VERSION_0_10_CHECK
/* I'm a little rusty on enums, you might need to
* cast to int, i'm not sure */
return uv_inet_pton(af, src, dst).code;
#else
return uv_inet_pton(af, src, dst);
#endif
}
对于其他可能的不兼容性,请尝试在主代码中尽可能少地使用版本检查,并为脏工作编写包装器。这样,您的主要代码看起来会更好。
如何在我的 node
addon
中跨多个版本的节点进行编译时处理方法的多个版本。例如:node
版本 0.10*
的 uv_inet_pton
和 uv_inet_pton
不同于 0.12.*
。 return 类型在这些版本中有所不同。我可以通过定义宏或预处理器来处理这种情况吗?
0.10中的签名是:
typedef struct uv_err_s uv_err_t;
uv_err_t uv_inet_pton(int af, const char* src, void* dst);
struct uv_err_s {
/* read-only */
/* MY ADDITION:
uv_err_code is an enum here, and 0 means OK.
*/
uv_err_code code;
/* private */
int sys_errno_;
};
所以对这个函数的调用 return 是一个结构,它有一个 code
字段,它指定错误,0 表示成功。
至于newer versions,return类型已经改变:
UV_EXTERN int uv_inet_pton(int af, const char* src, void* dst);
因此,使用 newer and older 版本中提供的版本信息,您可以推断出您正在编译的版本。这些链接适用于 0.10
和 1.0x
,但您也可以在 0.12
中获得类似信息。
如果函数return是int,0表示成功,其他值表示失败,则需要使用下面提供的函数:
int my_inet_pton(int af, const char* src, void* dst)
{
#ifdef VERSION_0_10_CHECK
/* I'm a little rusty on enums, you might need to
* cast to int, i'm not sure */
return uv_inet_pton(af, src, dst).code;
#else
return uv_inet_pton(af, src, dst);
#endif
}
对于其他可能的不兼容性,请尝试在主代码中尽可能少地使用版本检查,并为脏工作编写包装器。这样,您的主要代码看起来会更好。