【发布时间】:2019-07-30 00:59:22
【问题描述】:
为什么 C 中的函数声明需要知道指向函数的参数和返回值的类型?
c中的指针声明如下:
returnType ( *funcPtrName ) ( paramTypes )
例如下面的foo:
char my_func ( int x )
{
...
}
int main ()
{
char ( *foo ) ( int );
foo = my_func;
foo( 2 );
}
在声明指向值的指针时,类型用于确定一个元素的大小(以字节为单位)。例如在int* p 中,int 告诉编译器p 指向的元素是sizeof( int ) 分开的。此信息用于指针运算。
但是,函数指针指向单个地址,不允许指针运算。
那么为什么需要额外的信息呢? returnType 和 paramTypes 是否仅用于支持编译器的错误检查? (例如,在用户分配类型不匹配的函数时提醒用户)。
【问题讨论】:
-
什么是类型系统,如果不是仅用于支持编译器错误检查的额外信息?
-
函数原型存在的原因完全一样
标签: c pointers compiler-construction function-pointers static-typing