比较包装函数的签名

  • 本文关键字:函数 包装 比较 gcc c99
  • 更新时间 :
  • 英文 :


gcc支持包装函数,以便调用包装函数而不是实际函数。此替换发生在链接器级别。

/* myfile.c */
int myF(int x);
int __wrap_myF(int x)
{
return x + 1;
}
int main(int argc, char ** argv)
{
return myF(5);
}

当我用

编译这个时
gcc -Wl,--wrap=myF myfile.c -o myfile.exe

并执行二进制,我得到返回值5。

当我现在更改__wrap_myF()的签名时,编译器/链接器无法识别。如果我按照以下方式更改签名,我希望出现错误或至少警告:

int myF(int x);
int __wrap_myF(int x, int y)  /* <-- added a second parameter */
{
return x + 1;
}
int main(int argc, char ** argv)
{
return myF(5);
}

是否有一种方法,gcc自动抛出一个错误,如果包装函数签名不等于包装的一个?

是否有一些gcc扩展,允许比较两个函数的签名?

_Static_assert(__builtin_signature(myF) == __builtin_signature(__wrap_myF), "failure")

如果有一个C标准的方式,我会很感激,但我强烈怀疑这一点。

提前感谢。

如果有C标准方式

没有这样的方法。

是否有一些gcc扩展,允许比较两个函数的签名?

_Static_assert(
__builtin_types_compatible_p(
__typeof__(&myF), __typeof__(&__wrap_myF)
), "failure");

最新更新