给定:
typedef type-declaration synonym;
我可以看到是怎么做到的:
typedef long unsigned int size_t;
将size_t
声明为long unsigned int
的同义词,但是我(知道它是这样做的,但是)不能确切地看到它是如何做到的:
typedef int (*F)(size_t, size_t);
将F
声明为pointer to function (size_t, size_t) returning int
的同义词
在第一个示例中,类型定义函数的两个操作数(type-declaration, synonym)
是long unsigned int
和size_t
。
在F
的声明中,类型定义函数的两个参数是什么?或者是否存在类型定义函数的重载版本?
如果C和C++之间有相关的区别,请详细说明,否则我主要对C++感兴趣,如果这有帮助的话。
发布于 2010-09-24 06:45:38
使用typedef
的类型声明与相应的变量声明相同,只是前面加上了typedef
。所以,
int x; // declares a variable named 'x' of type 'int'
typedef int x; // declares a type named 'x' that is 'int'
这与函数指针类型完全相同:
int(*F)(size_t); // declares a variable named F of type 'int(*)(size_t)'
typedef int(*F)(size_t); // declares a type named 'F' that is 'int(*)(size_t)'
这不是一个“特例”;这只是一个函数指针类型的样子。
发布于 2010-09-24 06:49:15
这并不是typedef的正式语法,它只是它可以采用的一种模式。在C标准6.7.1中,typedef
在语法上被定义为存储类说明符(如extern
或static
)。它修改声明,以便声明类型别名而不是对象。
typedef
既不是函数,也不是运算符,所以“参数”、“操作数”或“重载”的概念不适用于它。它只是告诉编译器你在做什么类型的声明。
在C++中,typedef
在语法上被定义为decl说明符,而不是存储类说明符。存储类说明符也是decl说明符,friend
也是。我不认为这有什么实际的区别,这是C语言的另一种说法,但如果你想亲眼看看,它是C++标准的7.1。我承认,这让我暂时感到困惑。
发布于 2010-09-24 07:04:40
您最初对typedef语法的假设是
typedef type-declaration synonym;
结构绝对不正确。Typedef语法没有这种结构,也从来没有过这种结构。
Typedef语法是普通声明的语法,就像C语言中的任何其他声明一样。关键字typedef
只是一个声明说明符,它指示声明的名称是类型定义名称,而不是变量、函数指示符或其他东西。
您可以在同一个typedef声明中使用多个声明符,例如
typedef int TInt, *TIntPtr, (*TIntFuncPtr)(void), TIntArr10[10];
https://stackoverflow.com/questions/3783016
复制相似问题