wef*_*fa3 5 c parameters pointers function-pointers function
我只是注意到这个编译没有任何错误或警告使用-pedantic -Wall两者gcc和clang.
#include <stdio.h>
int x = 0;
void func(int f(const char *)) {
f("func()!");
}
int main(void) {
func(puts);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,似乎将参数f视为指向函数的指针int (*)(const char *).
但这种行为是我从未见过或听过的.这是合法的C代码吗?如果是这样,那么当您将函数作为函数的参数时会发生什么?
这是标准允许的。来自 C99 标准第 6.9.1 章(取自http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf):
示例 2 将一个函数传递给另一个函数,人们可能会说
Run Code Online (Sandbox Code Playgroud)int f(void); /*...*/ g(f);那么 g 的定义可能是
Run Code Online (Sandbox Code Playgroud)void g(int (*funcp)(void)) { /*...*/ (*funcp)(); /* or funcp(); ... */ }或者,等价地,
Run Code Online (Sandbox Code Playgroud)void g(int func(void)) { /*...*/ func(); /* or (*func)(); ... */ }
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |