小编Ann*_*nne的帖子

这个函数指针的前向声明在C中是否有效?

我试图找出以下前向声明在ANSI-C中是否有效:

第一档:

extern void * fptr;   // opaque forward declaration.
int main (void) {
  fptr = NULL;        // set the function pointer to NULL
}
Run Code Online (Sandbox Code Playgroud)

第二档:

typedef int (*fptr_t)(int);
fptr_t fptr;         // real declaration of the function pointer
Run Code Online (Sandbox Code Playgroud)

对我来说,这应该是无效的,因为fptr如果用两种不同的类型声明,但既没有gcc也没有clang给出任何警告.

我会更具体地对C11标准的精确点感兴趣,这些点可以得出结论为什么它有效(或无效).


编辑:在C11标准中,6.2.7:2说:

引用同一对象或函数的所有声明都应具有兼容类型; 否则,行为未定义.

但我找不到如何判断是否void*兼容fptr_t.

c function-pointers

14
推荐指数
2
解决办法
1174
查看次数

标签 统计

c ×1

function-pointers ×1