定义指向 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;
我刚刚了解到 函数指针 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;