是否可以在C中使用函数表达式?例如,我有以下代码片段(在main
函数内):
void print_line(char *data) {
printf("%s\n", data);
}
// print all elements in my_list
list_foreach(&my_list, print_line);
我想做这样的事情:
list_foreach(&my_list, void (char *data) {
printf("%s\n", data);
});
在C中有可能出现这种情况吗?
答案 0 :(得分:7)
总之,不,至少不是类似Javascript的语法。函数指针与您将要获得的一样接近。两种句法上的差别很小。如果您正在寻找闭包或内部函数的行为,那么您肯定不会很快看到它们。
答案 1 :(得分:4)
不在标准C中,没有。 Apple已经推出了一个名为blocks的功能,可以让你这样做,并且它已被提交用于标准化,但它还没有(如果它能够完成)。 Apple的语法如下:
list_foreach(my_list, ^(char *data) {
printf("%s\n", data);
});
它基本上是函数指针语法,*
替换为^
(以及表达式中返回类型的推断)。
答案 2 :(得分:2)
你不能在普通的C中做到这一点。但你可以用宏来伪装:
#define FOR_EACH(type, x, array, size, code) \
do { \
int i; \
for (i=0; i<size; ++i) { \
type x = array[i]; \
code \
} \
} while(0)
int main()
{
int arr[] = {0,1,2,3,4,5,6};
FOR_EACH(int, x, arr, 7, printf("%d ", 1 << x); );
return 0;
}
修改强>
我已经将示例重新编码为更便携 - 不使用GCC块扩展。
答案 3 :(得分:1)
绝对不是像Objective-C块,闭包等。但是使用函数指针呢?