比较包装函数的签名

Compare Signature of Wrapped Functions

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

并执行二进制文件,我得到 return 值 5.

当我现在更改 __wrap_myF() 的签名时,compiler/linker 无法识别。如果我按如下方式更改签名,我希望出现错误或至少是警告:

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 标准方法,我将不胜感激,但我对此表示强烈怀疑。

提前致谢。

If there would be a C standard way

没有这种方法。

Is there some gcc extension, that allows to compare the signatures of two functions?

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