我对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来理解它。