代码之家  ›  专栏  ›  技术社区  ›  evilpie

如何命名结构变量

  •  2
  • evilpie  · 技术社区  · 15 年前

    我经常使用winapi处理私人项目,正如您可能知道的,它有数千个命名和类型化的结构,如内存_Basic_信息。

    在我的问题中,我将坚持这一点,当您想命名一个这种类型的变量时,还有什么更好的选择。这个箱子有什么款式指南吗?

    例如,如果我需要virtualqueryex函数的那个变量。

    一些想法:

     MEMORY_BASIC_INFORMATION memoryBasicInformation;   
     MEMORY_BASIC_INFORMATION memory_basic_information;
    

    只需使用非大写结构的名称,并带有或不带下划线。

    MEMORY_BASIC_INFORMATION basicInformation;
    MEMORY_BASIC_INFORMATION information;
    

    短格式?

     MEMORY_BASIC_INFORMATION mbi;
    

    我经常看到这种样式,使用结构名称的缩写。

     MEMORY_BASIC_INFORMATION buffer;
    

    virtualqueryex定义了第三个参数lpbuffer(在这里您将指针传递给结构),因此使用这个名称也可能是一个主意。

    干杯

    3 回复  |  直到 15 年前
        1
  •  2
  •   Jason R. Coombs    15 年前

    一般来说,不鼓励根据变量的类型来命名变量。相反,尝试提供有关使用的特定上下文和目的的附加信息。

    使用内存基本信息示例,考虑结构的上下文。您是否在使用这些信息迭代许多这样的信息结构?那么也许

    MEMORY_BASIC_INFORMATION currentFrame;
    

    或者,如果您正在对内存信息进行测试以了解某些状态,那么可能是一个候选者。

    MEMORY_BASIC_INFORMATION candidate;
    

    现在您可以编写类似“测试……的候选结构”的文档。

    您可能会发现您仍然希望使用类型前缀位置包含类型信息。如果是这样,你可以称之为 mbiCurrentFrame mbiCandidate .

    如果目的或上下文是真正抽象的,比如API函数本身的情况,我会选择一些简单而直接的东西,比如 info buffer 除非这些名字在上下文中可能被误解。

        2
  •  0
  •   Sparky    15 年前

    我认为这取决于许多问题,在努力提高可读性时,您只需要找到最佳的平衡点。

    1. 窗宽
    2. 程序中使用的类似名称的变量/类型。

    也就是说,如果我能摆脱它,我可能会用…

    MEMORY_BASIC_INFORMATION  info;
    

    如果有其他类似的类型或变量名,那么我会添加一些描述性修饰符,例如…

    MEMORY_BASIC_INFORMATION  memBasicInfo;
    

    或者,如果窗户房地产有限(我从事过的一些项目坚持最多80个字符),我可以选择……

    MEMORY_BASIC_INFORMATION  mbi;
    

    但是为了使它尽可能的可读,我尽量保持一致——并且 那个 我认为这是最重要的事情之一。

    到处都是,但我希望能有所帮助。

        3
  •  0
  •   Tim Post Samir J M Araujo    15 年前

    尝试保留typedef的大小写和首字母缩写,例如

    MEMORY_BASIC_INFORMATION MBI_temp
    

    我处理了很多代码,这些代码必须在Linux和Windows之间保持可移植性,这对我们来说也是一个问题。

    你也可以在骆驼的情况下这样做:

    MEMORY_BASIC_INFORMATION MBITemp
    

    …但这似乎没有什么不言而喻的。

    关键是,任何熟悉这些结构的人 应该 很快就认识到它们是什么。请确保不要在另一个名称空间上踩踏。

    关键是,在您所处理的每一棵树中保持一致。在两种情况下,这实际上只是一个值得注意的问题:

    1. 全局的
    2. 英里长功能

    如果您的函数太长,以至于必须向上滚动五页到声明中才能看到变量是什么,那么要处理的问题比变量命名法要大:)

    令人恼火的是,这可能会引入一些奇怪之处,因为语法将其作为常量进行突出显示,但对于底层typedef也是如此。