基本的typedef操作数语法

时间:2010-09-23 22:40:16

标签: c++ c typedef

假设:

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

的同义词

第一个示例中的typedef的两个操作数(type-declaration, synonym)long unsigned intsize_t

F声明中typedef的两个参数是什么,或者是否存在typedef的重载版本?

如果C和C ++之间存在相关区别,请详细说明,否则我主要对C ++感兴趣,如果这有帮助的话。

5 个答案:

答案 0 :(得分:31)

使用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)'

这不是一个“特例”;这就是函数指针类型的样子。

答案 1 :(得分:7)

这不是typedef的正式语法,它只是它可以采用的模式之一。在C标准6.7.1中,typedef在语法上被定义为存储类说明符(如externstatic)。它修改了一个声明,因此声明声明了一个类型别名而不是一个对象。

typedef不是函数或运算符,因此“参数”,“操作数”或“重载”的概念不适用于它。它只是告诉编译器你正在做什么样的声明。

在C ++中,typedef在语法上定义为 decl-specifier ,它不是存储类说明符存储类说明符也是 decl-specifiers friend也是如此。我不认为这会产生任何实际的区别,这是另一种说C相同的方式,但如果你想要自己看一下,它是C ++标准的7.1。我承认暂时让我感到困惑。

答案 2 :(得分:2)

关于具有

的typedef语法的初始假设
typedef type-declaration synonym;

结构绝对不正确。 Typedef语法没有那个结构,从来没有。

Typedef语法是普通声明的语法,就像C语言中的任何其他声明一样。关键字typedef只是一个声明说明符,表示声明的名称是typedef名称,而不是变量,函数指示符或其他名称。

您可以在同一typedef声明中使用多个声明符,例如

typedef int TInt, *TIntPtr, (*TIntFuncPtr)(void), TIntArr10[10];

答案 3 :(得分:1)

不要将typedef视为采用两个参数(类型和同义词)的操作,而应将其视为类型限定符。要声明一个名为F的变量,它是一个函数指针,接受两个size_t参数并返回int,您只需:{/ p>

int (*F)(size_t, size_t);

添加类型限定符typedef,而不是声明变量,而是声明了类型别名。

答案 4 :(得分:0)

typedef正在使用声明语法。

函数指针typedef与用于声明函数指针的函数指针相同。除了那种情况,你要声明一个类型,而不是变量。