c++ - 请解释 "typedef"的语法规则和范围

标签 c++ c function-pointers typedef

规则是什么? OTOH 简单的案例似乎暗示新类型是一行的最后一件事。像这里 Uchar 是新类型:

typedef unsigned char Uchar;

但是函数指针完全不同。这里的新类型是 pFunc:

typedef int (*pFunc)(int);

我想不出任何其他的例子,但我遇到了一些非常令人困惑的用法。

那么是否有规则,或者人们只是应该从经验中知道这是如何完成的,因为他们以前见过这样做?

另外:typedef 的范围是什么?

最佳答案

基本上,typedef 与对象声明的语法完全相同,只是它以 typedef 为前缀。这样做会改变声明的含义,以便新标识符声明对象类型的别名,如果它是一个正常的声明,则该对象将拥有。

typedef 的范围与对象声明的范围完全相同,因此它可以是文件范围或 block 的本地,或(在 C++ 中)命名空间或类。

例如

声明一个int:

int a;

声明一个类型是 int 的别名:

typedef int a_type;

声明一个指向 char 的指针:

char *p;

声明 char * 的别名:

typedef char *pChar;

声明一个函数指针:

int (*pFn)(int);

为类型声明一个别名,该类型是“指向采用 int 并返回 int 的函数的指针”:

typedef int (*pFunc)(int);

关于c++ - 请解释 "typedef"的语法规则和范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2427739/

相关文章:

c++ - 使用模板在编译时初始化数组指针的 const vector

c - 将文件读入动态数组时出现段错误 11 错误

Fortran OpenACC 使用函数指针调用设备上的函数

c++ - 使用非捕获 lambda 作为可变参数模板函数的函数指针参数给出 "no matching function call"

C++ 通用函数参数(不同的参数)

c++ - std::tuple 是否需要使用空基类优化?

c++ - std::forward 和引用折叠的工作

c - C中的反向链表

c++ - std::vector 出现明显的歧义错误,但它仍然可以编译

c - strlen() 拒绝从 struct hostent 读取字符串 *