首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ty对联f结构声明为两种类型:“ty胡枝子f结构x{ .. } X,*XPointer”

Ty对联f结构声明为两种类型:“ty胡枝子f结构x{ .. } X,*XPointer”
EN

Stack Overflow用户
提问于 2015-02-23 15:32:34
回答 4查看 775关注 0票数 10

很抱歉,如果之前有人问过这个问题,我甚至不知道该找什么来解决这个问题。

当我创建一个typedef struct时,我通常会这样做:

代码语言:javascript
复制
typedef struct myStruct {
  int a;
  int b;
  struct myStruct *next;
} MyStruct;

所以我在最后用MyStruct声明它。然后,当我创建将其作为参数传入的函数时,我将

代码语言:javascript
复制
int doSomething(MyStruct *ptr){

}

然而,我与一位朋友在一个项目上合作,我遇到了他的编码风格,也就是像这样声明*MyStructP

代码语言:javascript
复制
typedef struct myStruct {
  int a;
  int b;
  struct myStruct *next;
} MyStructR, *MyStructP;

然后,他在函数中使用MyStructP,因此他的参数如下所示:

代码语言:javascript
复制
int doSomething(MyStructP)

因此,他不必在参数列表中使用*。这让我感到困惑,因为当我查看参数列表时,我总是寻找*来确定arg是否是一个指针。最重要的是,我正在创建一个函数,它接受我创建的结构和他创建的结构,所以我的arg有*,而他的没有。太混乱了!!

有人能对两者之间的差异给出见解/比较/建议吗?专业人士?犯人?哪一种方式更好或更糟,还是更广泛地使用?任何信息。谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-02-23 15:46:01

Linux内核编码风格说为了避免这种类型的类型:

第5章: Typedefs 请不要使用像"vps_t“这样的东西。 在结构和指针中使用typedef是错误的。当你看到 vps_t a; 在源头上,这意味着什么? 相反,如果它说 结构virtual_container *a; 你实际上可以分辨出"a“是什么。

票数 9
EN

Stack Overflow用户

发布于 2015-02-23 15:37:28

将指针隐藏在类型防御后面通常被认为是糟糕的样式,除非指针应该是不透明的句柄(例如,SDL_GLContextvoid*)。

在这里不是这样的,我同意你的看法,这比帮助更令人困惑。

票数 12
EN

Stack Overflow用户

发布于 2015-02-23 15:38:13

有些人在命名变量时喜欢使用匈牙利符号的想法。有些人在命名类型时,会把这个概念做得更深入。

我觉得这是品味的问题。

但是,我认为它掩盖了一些事情(比如在您的例子中),因为您必须挖掘名称的声明,才能找到它的类型。我希望事情是显而易见的和明确的,我会避免这样的类型名称。

(请记住,typedef没有引入新类型,而只是引入了新类型别名的新名称。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28677318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档