定义指向 be32toh() 函数的函数指针

Define a function pointer to be32toh() function

我刚刚了解到 函数指针 here 但我无法定义指向 be32toh() 或 endian.h 的其他函数的函数指针header.

首先,我可以按照给定线程中的说明进行操作:


#include <endian.h>
int addInt(int n, int m) {
    return n+m;
}
int main(){
    int (*functionPtr)(int,int);
    functionPtr = addInt;    
    return 0;
}

但是当我尝试对像 be32toh() 这样的函数做同样的事情时,我会得到一个编译错误:

#include <stdint.h>
#include <endian.h>
int addInt(int n, int m) {
    return n+m;
}
int main(){
    int (*functionPtr)(int,int);
    functionPtr = addInt;
    uint32_t (*newptr)(uint32_t);
    newptr = &be32toh;
    return 0;
}

编译为:

$ gcc test.c

结果如下:

test.c: In function ‘main’:
test.c:15:15: error: ‘be32toh’ undeclared (first use in this function)
   15 |     newptr = &be32toh;
      |               ^~~~~~~
test.c:15:15: note: each undeclared identifier is reported only once for each function it appears in

有什么问题以及如何解决?

What's the problem

be32toh是一个宏。

how to fix it?

自己写函数就行了

uint32_t be32toh_func(uint32_t a) {
     return be32toh(a);
}

....
     newptr = &be32toh_func;