c - 别名的语法

标签 c

我正在查看 LPSTR定义为

typedef char* PSTR, *LPSTR;

文档说 PSTR 是 LPSTR 的别名。缺少取消引用运算符这一事实足以告诉我它是别名吗?别名是如何声明的?换句话说,如果我将其更改为

typedef char* PSTR, PSTR2, *LPSTR;

我现在有两个别名吗?如果我添加另一个取消引用的变量会怎样?

typedef char* PSTR, *LPSTR, *LPSTR2;

最佳答案

什么都不缺。星号周围的空格无关紧要。

这个:

typedef char* PSTR, *LPSTR;

相同
typedef char *PSTR, *LPSTR;

反过来等同于拥有

typedef char *PSTR;
typedef char *LPSTR;

两者都为“指向 char 的指针”类型定义了类型别名,但它们之间没有任何联系,事实上它们都是用相同的 typedef 声明的没关系,主要是在你想要像这样的变体(有和没有指针)时完成的:

typedef struct {
  int x, y;
} Point, *PointPtr;

顺便说一下,这是我真的不鼓励的做法(问题本身的代码也是如此),因为“隐藏星号”通常不是一个好主意。星号很重要,让它出现而不是隐藏在类型中会使代码更清晰。

关于c - 别名的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11313477/

相关文章:

c - 如何发现文件夹中存在哪些文件

重新解释为 float 时可以指定字节序吗?

c++ - 在 C/C++ 中强制转换有什么问题?

c - 在单链表中查找并移动

c - scanf 打印到控制台?

c++ - 对 `_imp__SetupDiGetClassDevsA@16' 的 undefined reference (即使使用 -lsetupapi)

c++ - 从 std::fstream 获取 FILE*

c - 有没有办法在 C 中循环遍历具有不同类型元素的结构?

c - 在 C/C++ 中求值和替换

C:如何在运行时改变我的程序中自己的程序?