什么是C中最常见的命名约定?什么是C中最常见的命名约定?(What are the most com

2019-05-12 16:13发布

什么是命名惯例通常用C使用? 我知道至少有二:

  1. 的GNU / Linux / K&R与lower_case_functions
  2. ? 名称 ? 与UpperCaseFoo功能

我只是在这里谈论℃。 我们的大多数项目都是在我们使用C.小型嵌入式系统

这是一个我使用我的下一个项目的规划:


Ç命名约定

Struct              TitleCase
Struct Members      lower_case or lowerCase

Enum                ETitleCase
Enum Members        ALL_CAPS or lowerCase

Public functions    pfx_TitleCase (pfx = two or three letter module prefix)
Private functions   TitleCase
Trivial variables   i,x,n,f etc...
Local variables     lower_case or lowerCase
Global variables    g_lowerCase or g_lower_case (searchable by g_ prefix)

Answer 1:

这里最重要的事情是一致性。 这就是说,我按照GTK +编码约定,可以总结如下:

  1. 所有宏和常量的上限: MAX_BUFFER_SIZETRACKING_ID_PREFIX
  2. 结构的名称和类型定义的首字母大写: GtkWidgetTrackingOrder
  3. 上结构操作功能:经典的C风格: gtk_widget_show() tracking_order_process()
  4. 指针:没有什么花哨这里: GtkWidget *fooTrackingOrder *bar
  5. 全局变量:只是不使用全局变量。 他们是邪恶的。
  6. 函数是有的,但不应该被直接调用,或有模糊的用途,或什么:在开始的一个或多个下划线: _refrobnicate_data_tables() _destroy_cache()


Answer 2:

“结构指针”是不是需要一个命名约定条款支付他们的实体。 他们只是struct WhatEver * 。 不隐瞒的事实,那就是涉及一个聪明,“显而易见”的typedef指针。 这也是没有用处的,是更长的时间来输入,并破坏申报和获得之间的平衡。



Answer 3:

那么首先C不具有公共/私营/虚函数。 这是C ++,它有不同的约定。 在C语言中,你通常有:

  • 在ALL_CAPS常量
  • 下划线划在结构或函数名的话,几乎没有你看到骆驼情况℃;
  • 结构,类型定义,工会和枚举值(联合和结构)的成员通常是在较低的情况下(在我的经验),而不是C ++ / Java的/ C#/等制作的第一个字母大写的约定,但我想这是可能的ç过。

C ++是更复杂的。 我在这里看到一个真正的组合。 骆驼案例类名或小写+下划线(骆驼的情况是比较常见的在我的经验)。 结构是很少使用(通常是因为库需要他们,否则你会使用类)。



Answer 4:

我会建议不要混合骆驼和下划线分离(如你提出了结构成员)。 这是令人困惑的。 你会想,嘿,我有get_length所以我应该可能已经make_subset ,然后你发现它实际上是makeSubset 。 使用最小惊讶的原则,是一致的。

我确实觉得键入名称,如结构,typedef和枚举驼峰有用。 这就是全部,虽然。 对于所有的休息(函数名,结构成员的名字,等等),我用underscore_separation。



Answer 5:

C#,JAVA,C,C ++和Objective C的同时编码,我已经采取了非常简单和明确的命名约定,以简化我的生活。

首先,它依赖于现代IDE的力量(比如Eclipse,Xcode中...),与可能性悬停或Ctrl点击得到了快速的信息......接受的是,我抑制使用任何前缀,后缀和其他的标记,只是由IDE给出。

然后,约定:

  • 任何名称必须是可读的一句话来说明你有什么。 像“这是我的约定”。
  • 然后,4种方法得到一个惯例了一句话:
    1. THIS_IS_MY_CONVENTION为宏,枚举成员
    2. ThisIsMyConvention文件名,对象名(类,结构,枚举,工会...),函数名,方法名,类型定义
    3. this_is_my_convention全局和局部变量,
      参数,struct和union元素
    4. thisismyconvention [可选]非常局部的暂时变量(例如像一个for()循环索引)

仅此而已。

它给

class MyClass {
    enum TheEnumeration {
        FIRST_ELEMENT,
        SECOND_ELEMENT,
    }

    int class_variable;

    int MyMethod(int first_param, int second_parameter) {
        int local_variable;
        TheEnumeration local_enum;
        for(int myindex=0, myindex<class_variable, myindex++) {
             localEnum = FIRST_ELEMENT;
        }
    }
}


Answer 6:

下面是一个(显然)罕见之一,我发现有用:首字母大写的模块名称,然后下划线,然后工作或首字母大写的文件范围名。 因此,例如:

Bluetooth_Init()
CommsHub_Update()
Serial_TxBuffer[]


Answer 7:

你知道,我喜欢保持简单,但清楚......因此,这里是我用的,在C:

  • 琐碎的变量i,n,c (只有一个字母。如果一个字母是不明确的,则使其成为一个局部变量),等等。
  • 局部变量lowerCamelCase
  • 全局变量g_lowerCamelCase
  • 常变量ALL_CAPS
  • 指针变量 :新增p_的前缀。 对于全局变量,这将是gp_var ,局部变量p_var ,为常变量p_VAR 。 如果使用远指针然后使用fp_而不是p_
  • 结构ModuleCamelCase (模块=全模块名称,或2-3个字母的缩写,但仍然在CamelCase 。)
  • 结构成员变量lowerCamelCase
  • 枚举ModuleCamelCase
  • 枚举值ALL_CAPS
  • 公共职能ModuleCamelCase
  • 私有函数CamelCase
  • CamelCase

我的typedef我的结构,但使用相同的名称,标签和类型定义两者。 标签并不意味着被普遍使用。 相反,它是preferrable使用的typedef。 我也向前声明typedef的公共模块头封装和这样我就可以在定义中使用typedef定义的名称。

struct 示例

typdef struct TheName TheName;
struct TheName{
    int var;
    TheName *p_link;
};


Answer 8:

我被一件事困惑:你打算建立一个新项目一个新的命名约定。 一般来说,你应该有一个命名约定公司 - 或团队范围内。 如果您已经有任何形式的命名约定的项目,你不应该改变约定一个新的项目。 如果上述公约只是你的现行做法编纂,那么你是金色的。 越是它不同于现有的事实上的标准,就越难将成为新的标准,以获得心理份额。

关于我想补充的唯一建议是我采取了喜欢在类型uint32_t的类型和size_t的风格年底_t。 这是非常C-ISH我虽然有些可能会抱怨它只是“反转”的匈牙利。



Answer 9:

你也应该想想的话为了使汽车名完成更容易。

一个好的做法:库名+模块名+动作+主题

如果部分是不相关的就跳过它,但至少一个模块名称和动作总是应提交。

例子:

  • 函数名称: os_task_set_priolist_get_sizeavg_get
  • 定义(这里一般不采取行动的一部分): OS_TASK_PRIO_MAX


Answer 10:

可能有很多,主要的IDE决定一些趋势和C ++约定推也。 对于C常用:

  • UNDERSCORED_UPPER_CASE(宏定义,常量,枚举成员)
  • underscored_lower_case(变量,函数)
  • 驼峰(自定义类型:结构,枚举,工会)
  • uncappedCamelCase(哥的Java风格)
  • UnderScored_CamelCase(变量,在一种命名空间的功能)

对于全局匈牙利命名法是不错,但不适合的类型。 而且即使是俗名,请使用至少两个字符。



文章来源: What are the most common naming conventions in C?