关于typedef的正确理解

我对typedef的理解一直都是认为它和#define一样,分成三个部分,比如:

#define A B

但是遇到以下这种函数类型定义

typedef void (*funcName)(int);

按照上面的理解,难道是要把void定义成(*funcName)(int)?显然不对。

这个问题困扰了我很久。typedef并不是以空格为分隔符,把一句定义分隔成几个固定的部分来处理的。

typedef这个预处理关键字的意思是:定义一个类型常量。也就是说,定义内容里面除了类型部分,就是常量部分,至于它们的位置,没有固定的前后顺序,符合常规的语法就行。比如

typedef unsigned int uint
typedef QString QStr
typedef int (*funcName)(char, bool)

分析类型定义式时,你只需要找出里面包含的类型,常量名即可,不要用#define来理解它。

posted @ 2022-05-13 17:02  撬动未来的支点  阅读(77)  评论(0编辑  收藏  举报