C函数名称或函数指针?

时间:2016-10-01 11:52:57

标签: c function-pointers

让我们看看这段代码:

imageNames.contains(".DS_Store") ? imageNames.remove(at: imageNames.index(of: ".DS_Store")!) : imageNames[0]

设置#include <stdio.h> typedef int (*callback) (void *arg); callback world = NULL; int f(void *_) { printf("World!"); return 0; } int main() { printf("Hello, "); // world = f; world = &f; // both works if (world != NULL) { world(NULL); } } 变量时,两者都有 worldworld = f;有效。

我应该使用哪个?它取决于编译器还是C版本?

world = &f;

2 个答案:

答案 0 :(得分:3)

world = f;world = &f;都有效,因为f&f在将其作为参数传递时没有区别。

参见C99规范(第6.7.5.3.8节)。

  

参数声明为''函数返回类型''应调整为''函数返回类型的指针'',如6.3.2.1中所述。

答案 1 :(得分:1)

您的函数f的类型为int (void *_)。只要在表达式中使用f,它就会隐式转换为指向自身的指针,类型为int(*) (void *_)

  

我应该使用哪个?

因此,出于所有实际目的,函数f的名称和指向同一函数&f的指针是可互换的。另请查看"Why do all these function pointer definitions all work? "

  

是否依赖于编译器或C版本?

不依赖于任何编译器或C版本。