typedef定义函数类型的用法

typedef定义函数类型的用法

最近在CodeProject上看了段关于COM in plain C项目的代码,其中的一段关于typedef使用的代码一时让人有点模糊,代码如下:

typedef long SetStringPtr(char *);
typedef long GetStringPtr(char *, long);

typedef struct {
   SetStringPtr * SetString;
   GetStringPtr * GetString;
   DWORD          count;
   char           buffer[80];
} IExample;

long SetString(char * str)
{
   return(0);
}

IExample * example;
example->SetString = SetString;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

看起来似乎是函数指针的用法,又不太确定,网上查了下资料,发现这是typedef的一种用法:为复杂的声明定义一个别名。参见:C++ typedef用法,文章介绍了typedef的多种用法和注意事项。

例如: 
原声明: 
int *(*arr[5])(char *); 
变量名为a,如想用一个新别名pFun替换arr,可以定义如下: 
typedef int *(*pFun)(char *); 
原声明的最简化版: 
pFun arr[5]; 
当然这样的用法并不是很复杂,还有更复杂的用法可以参见上面的“C++ typedef用法”这篇文章。

下面来看下

typedef long SetStringPtr(char *);
SetStringPtr * SetString;
  • 1
  • 2

第一句定义了一个新的类型,这个类型是一个返回long型,拥有参数char*的函数。 
第二句用上面定义的函数类型定义了一个指针,自然此时的“SetString”就是一个函数指针(返回long型,拥有参数char*)了。所以才有了example->SetString = SetString; 。

常见函数指针的定义类似于下面这样

int (*func)(int,int); 
  • 1

这也说明C语言中typedef的用法还是很灵活的,稍不留神就可能误解,另外关于函数指针的用法参见:C++中函数指针的使用 ,里面有关于函数指针的一些用法和见解。

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/helaisun/article/details/54845891
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值