基本的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 ++感兴趣,如果这有帮助的话。

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

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

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

typedef既不是函数也不是运算符,因此“argument”,“operand”或“overloading”的概念不适用于它。 它只是告诉编译器你正在做什么样的声明。

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

关于typedef语法的初始假设

 typedef type-declaration synonym; 

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

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

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

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

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

 int (*F)(size_t, size_t); 

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

typedef使用声明语法。

函数指针typedef与用于声明函数指针的函数指针相同。 除非在这种情况下,您要声明一个类型,而不是变量。