前言:

        在 C/C++ 中,类名、接口名、变量名和函数名等的命名规则是比较自由的,开发者可以根据自己的喜好选择合适的命名方式。但是,为了保持代码的可读性和可维护性,我们通常遵守一些命名规则。

        例如驼峰命名法、下划线命名法、帕斯卡命名法、常量命名法等,此外本文末尾还延申了一些常见的代码书写风格(例如{}),以及两个对代码执行有影响的编程习惯(采用const type &,采用NULL=p)。

一、常见的命名法

1.驼峰法命名法

        驼峰法是一种较为常见的变量名和函数名命名规则,其命名方式是将每个单词的首字母大写,其他字母小写(第一个单词首字母小写)。例如:

int myNumber;
void doSomething();

        这是一种可读性较高的命名方式,使得变量名和函数名清晰易懂。

2.下划线命名法

        下划线命名法是一种将单词用下划线 _ 分隔的命名方式。它可以增加变量名和函数名的可读性,特别是在变量名和函数名比较长时,更容易让人理解。例如:

int my_number;
void do_something();

3.帕斯卡命名法

        帕斯卡命名法是一种把每个单词的首字母都大写的命名方式。它与驼峰命名法相似,不同之处在于,帕斯卡命名法中每个单词都必须大写。例如:

class MyClassName {
  // ...
};

class MyInterfaceName {
  virtual void doSomething() = 0;
};

4.匈牙利命名法

        匈牙利命名法以数据类型作为前缀,后跟描述变量用途的单词。例如:

int iCount;
float fPrice;
char cFirstChar;

这种命名方式可读性较强,但随着代码的复杂性增加,命名长度会大大增加。

5.短划线命名法(不建议使用

短划线命名法和下划线命名法类似,只不过是使用短划线 - 代替了下划线 _

let first-name = "John";
let last-name = "Doe";

        请注意,使用短划线命名法有时也会导致代码的可读性降低,因为它在一些语言和环境中被用作减号的语法符号。因此,在选择命名规范时,需要考虑到其可读性和可理解性,以及特定语言和环境的习惯和规范。

6.全部大写字母命名法

这种命名方式是将整个名称都用大写字母表示,例如:

MY_VARIABLE = "some value"
# 使用全部大写字母来表示一个变量名,但这不是常量

MY_LIST = [1, 2, 3]
# 使用全部大写字母来表示一个列表变量名

7.常量命名法

        全部大写字母命名法和常量命名法本质上是相同的,都是将标识符的每个字母都转换为大写字母来表示常量。在常量命名时,也可以采用上述两种命名方式中的一种,例如:

const int MAX_NUMBER = 100;
const double PI = 3.1415926;

        无论采用哪种命名方式,命名都应该表意明确、易读易懂,有助于提高代码的可读性和可维护性。在编写代码时,应该遵循命名规则,保持代码的一致性和整洁性。

二、在C/C++中的习惯使用

1.类名和接口名

        在 C++ 中,类名和接口名应当清晰明了、易读易懂,通常采用帕斯卡命名法。因为类名和接口名是代码中的重要组成部分,它们代表着特定的对象或概念,应该使用名词或动词+名词等形式来描述。例如:

class MyClassName {
  // ...
};

class MyInterfaceName {
  virtual void doSomething() = 0;
};

        需要注意的是,类名和接口名应当尽量简洁,并描述清晰明了的概念,同时避免使用过长的名称。此外,为了保持命名的一致性,类名和接口名也可以采用其他命名方式,例如驼峰命名法或下划线命名法。

2.函数名

在 C++ 中,函数名应该清晰明了、易读易懂,通常采用驼峰命名法或下划线命名法。

驼峰命名法的命名规则是将每个单词的首字母大写。例如:

void myFunction();
void doSomethingWithData();

下划线命名法的命名规则是将单词之间用下划线 _ 连接。例如:

void my_function();
void do_something_with_data();

        需要注意的是,无论采用哪种命名方式,函数名应该清晰明了、易读易懂,可以用动词或名词等形式表示函数的功能。同时,函数名也应该符合代码的命名规范和风格,保持命名的一致性。

3.变量名

在 C++ 中,变量名应该清晰明了、易读易懂,通常采用驼峰命名法或下划线命名法。

驼峰命名法的命名规则是将每个单词的首字母大写。例如:

int myVariable;
float myFloatVariable;

下划线命名法的命名规则是将单词之间用下划线 _ 连接。例如:

int my_variable;
float my_float_variable;

        需要注意的是,无论采用哪种命名方式,变量名应该清晰明了、易读易懂,可以用名词或形容词等形式表示变量的含义和作用。同时,变量名也应该符合代码的命名规范和风格,保持命名的一致性。

4.枚举命名

使用帕斯卡命名法,命名枚举名;使用常量命名法,命名枚举值。

以下是一些枚举命名的例子:

enum DayOfWeek {    // 一周的日
  SUNDAY,
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY
};

三、推荐、扩展和延申

推荐代码风格展示:

  • 类名/接口名采用帕斯卡命名方式;
  • 函数名采用驼峰命名方式;
  • 变量名采用下划线命名方式;
  • 常量采用常量命名方式
class MyClass { // 类名使用帕斯卡命名法
public:
    void myFunction(); // 函数名使用驼峰式命名法
private:
    int my_variable; // 变量名使用下划线命名法
    const int MY_CONSTANT = 100; // 常量名使用全大写字母,单词间使用下划线分隔
};

        其实,个人觉得只要自己习惯(能见名知意)就好,没有说一定非用哪一种;不过不建议出现这种情况,风格经常变动(其实就是乱写,例如一个程序里函数名命名出现好几种不同的风格)。

扩展:

观察下面两种风格的代码,注意区别{}的使用。

代码1:


    if (something_is_true) 
    {
        // do something
    } 
    else 
    {
        // do something else
    }

代码2: 


    if (something_is_true) {
        // do something
    } else {
        // do something else
    }

思考:看看你更喜欢用哪一款?(还是一样,不建议混用!) 

延申:

         以上都是风格问题,其实本质并不对代码执行造成影响(影响的只是人的心情,尤其是看别人的代码)。下面延申两个案例,这里不仅仅是代码风格的问题,也可能会影响程序的执行结果。

案例1:

        在传递参数时加上const,防止误修改原先值。


void process_string(const string &str) {
  cout << "The length of the string is: " << str.length() << endl;
}

        在函数中使用 const string & 参数能够提高程序的效率和性能,但是不能修改输入的字符串,因为该参数是以引用的方式传递的。

案例2:

        在C语言中有种编码习惯是比较表达式把常量放在前面,这样如果你把 == 写成了 = (赋值操作符),编译器就会报错。

int *p = NULL;
if (p == NULL) {
  printf("p is null\n");
}

// 或者用 Yoda 表达式
if (NULL == p) {
  printf("p is null\n");
}

        当然,在使用 C++11 及以上版本中,推荐使用 nullptr 关键字来代替 NULL 指针常量。(C++11及以上,可不用关注该习惯。)

总结:

        本文主要分享了一些常见的命名风格习惯(例如驼峰命名法、下划线命名法、帕斯卡命名法、常量命名法等),向读者推荐了C/C++中类名、接口名、函数名、变量名和常量的常见命名风格,以及扩展了一些常见的代码书写风格(例如{}),最后延申了两个对代码执行有影响的编程习惯。

        希望本文能给各位读者带来些许帮助,同时也欢迎热心的码友提供自己的见解分享在评论区!

06-03 16:46