C语言编码规范

server/2024/11/28 9:56:17/

在这里插入图片描述

以下是一套较为完整的C语言编码规范:

一、代码布局

  1. 缩进
    • 使用空格进行缩进,每级缩进为4个空格。这样可以保证代码在不同的编辑器和环境中都有一致的缩进效果。例如:
    if (condition) {// 这里缩进了4个空格statement1;statement2;
    }
    
  2. 大括号
    • 函数体、循环体、条件语句(if - else、switch - case)等的大括号要独占一行,并且左大括号与相应的关键字对齐,右大括号也独占一行。例如:
    int main()
    {// 函数体内容return 0;
    }
    
    • 对于简单的单语句块,可以省略大括号,但为了保持代码风格的一致性,最好还是加上大括号。例如:
    if (condition) {single_statement;
    }
    
  3. 空行
    • 在函数定义之间添加空行,以提高代码的可读性。例如:
    int function1()
    {// 函数1的内容return 0;
    }int function2()
    {// 函数2的内容return 0;
    }
    
    • 在不同的逻辑代码块之间也可以添加空行,比如变量定义部分和执行语句部分之间。
  4. *代码格式
    • 每行代码不超过80个字符,以便于阅读。
    • 在花括号{}的使用上,有多种风格,如K&R风格、Allman风格等,选择一种并保持一致。
      在这里插入图片描述

二、命名规范

  1. 变量命名
    • 变量名应该具有描述性,能够清楚地表达变量的用途。一般采用小写字母加下划线的方式命名,例如:student_namecount_of_elements
    • 避免使用单个字符(如ijk等)作为变量名,除非是在简单的循环计数器场景中,并且其作用域非常小。
  2. 函数命名
    • 函数名采用小写字母加下划线的方式命名,并且应该能够准确地描述函数的功能。例如:calculate_averageprint_report
    • 对于库函数和系统调用,应该遵循其原有的命名约定。
  3. 宏命名
    • 宏名全部采用大写字母,单词之间用下划线分隔,例如:MAX_VALUEPI
  4. 文件和代码结构
    • 使用.h扩展名表示头文件,.c扩展名表示源文件。
    • 头文件中声明公共函数和全局变量,源文件中定义它们。
    • 包含头文件时,优先包含本地头文件,然后是库头文件,最后是系统头文件,每组之间用空行分隔。

三、注释规范

  1. 文件注释
    • 在每个源文件的开头,应该有一段注释来描述文件的功能、作者、日期、版本等信息。例如:
    /** file: example.c* author: [Your Name]* date: [Creation Date]* description: This file contains functions for basic arithmetic operations.* version: 1.0*/
    
  2. 函数注释
    • 在函数定义之前,应该有注释来描述函数的功能、参数、返回值等信息。例如:
    /** function: calculate_sum* parameters:*   - num1: the first integer to be added*   - num2: the second integer to be added* return value: the sum of num1 and num2*/
    int calculate_sum(int num1, int num2)
    {return num1 + num2;
    }
    
  3. 代码内注释
    • 在代码中,对于复杂的逻辑部分、不易理解的算法等,应该添加行内注释来解释代码的意图。注释应该与代码保持适当的间距,并且要简洁明了。例如:
    // 这里是一个循环,用于计算数组元素的总和
    int sum = 0;
    for (int i = 0; i < array_size; i++) {sum += array[i];  // 将当前元素累加到总和中
    }
    

在这里插入图片描述

四、数据类型和变量声明

  1. 数据类型使用
    • 根据变量的用途和取值范围选择合适的数据类型。例如,对于表示状态的变量可以使用bool(如果支持C99标准)或int(0和非0表示两种状态);对于存储字符可以使用char
    • 避免使用无符号类型(unsigned),除非有特殊的理由,因为无符号类型的算术运算可能会导致意外的结果,特别是在涉及减法和比较操作时。
  2. 变量声明位置
    • 尽量在函数的开头声明变量,这样可以使变量的作用域更加清晰。但是,在C99及以上标准中,也允许在需要使用变量的地方进行声明,这样可以缩小变量的作用域,减少变量的生命周期,从而提高程序的安全性和性能。例如:
    int main()
    {int num1;// 其他代码return 0;
    }
    
    • 对于结构体、联合体和枚举类型,最好在文件开头或者函数开头进行定义和声明,这样可以使代码结构更加清晰。
      在这里插入图片描述

五、语句规范

  1. 赋值语句
    • 赋值语句的变量应该在左边,值在右边。例如:variable = value;。避免将赋值语句写成value = variable这种容易引起误解的形式,除非是在特殊的逻辑(如交换两个变量的值)中,并且应该添加清晰的注释。
  2. 条件语句
    • 条件表达式应该用括号括起来,以提高可读性和避免优先级错误。例如:if ((a > b) && (c < d))
    • if - else语句中,如果else部分的语句比较复杂,最好加上大括号。例如:
    if (condition) {// 语句块1
    } else {// 语句块2
    }
    
  3. 循环语句
    • for循环中,初始化、条件判断和迭代部分应该清晰明确。例如:for (int i = 0; i < n; i++),其中i的初始化、i < n的条件判断和i++的迭代操作一目了然。
    • whiledo - while循环中,循环条件也应该用括号括起来,例如:while (condition)do {... } while (condition);
      在这里插入图片描述

六、头文件规范

  1. 头文件包含顺序
    • 先包含C标准库头文件(如<stdio.h><stdlib.h>等),然后是系统特定的头文件,最后是自己编写的头文件。例如:
    #include <stdio.h>
    #include "my_header.h"
    
  2. 头文件保护
    • 为了防止头文件被重复包含,应该使用头文件保护机制。通常使用#ifndef#define#endif来实现。例如:
    #ifndef MY_HEADER_H
    #define MY_HEADER_H// 头文件内容#endif
    

在这里插入图片描述

七、例子:10000以内的所有质数

#include <stdio.h>
#include <math.h>int is_prime(int num) {if (num <= 1) return 0; // 小于等于1的数不是质数if (num % 2 == 0 && num > 2) return 0; // 排除大于2的偶数int limit = sqrt(num);for (int i = 3; i <= limit; i += 2) {if (num % i == 0) return 0;}return 1;
}int main() {printf("Prime numbers up to 10000:\n");for (int i = 2; i <= 10000; i++) {if (is_prime(i)) {printf("%d ", i);}}printf("\n");return 0;
}

http://www.ppmy.cn/server/145592.html

相关文章

快速理解微服务中Fegin的概念

一.由来 1.在传统的架构里面&#xff0c;我们是通过使用RestTemplate来访问其他的服务&#xff0c;但是这种方式就存在了一个很大的缺陷&#xff0c;也就是被调用方如果发生了服务的迁移(IP和端口发生了变化)&#xff0c;那么调用方也需要同步的在代码里面进行修改&#xff0c;…

大数据新视界 -- Hive 与其他大数据工具的集成:协同作战的优势(上)(13/ 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

PHP实现插入排序

插入排序&#xff08;Insertion Sort&#xff09;是一种简单直观的排序算法&#xff0c;适用于少量数据的排序。它的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。以下是一个用PHP实现插入排序…

根据后台数据结构,构建搜索目录树

效果图&#xff1a; 数据源 const data [{"categoryidf": "761525000288210944","categoryids": "766314364226637824","menunamef": "经济运行","menunames": "经济运行总览","tempn…

[java] 什么是 Apache Felix

概述 Apache Felix是一个开源的、符合OSGi&#xff08;Open Service Gateway Initiative&#xff09;R4规范的实现框架。OSGi是一个用于Java动态模块系统的一系列规范&#xff0c;而Apache Felix则是对这些规范的具体实现&#xff0c;它提供了一个轻量级的、高效的平台&#xf…

Linux操作系统2-进程控制3(进程替换,exec相关函数和系统调用)

上篇文章&#xff1a;Linux操作系统2-进程控制2(进程等待&#xff0c;waitpid系统调用&#xff0c;阻塞与非阻塞等待)-CSDN博客 本篇代码Gitee仓库&#xff1a;Linux操作系统-进程的程序替换学习 d0f7bb4 橘子真甜/linux学习 - Gitee.com 本篇重点&#xff1a;进程替换 目录 …

HarmonyOS开发者社区有奖征文二期活动开启!

HarmonyOS开发者社区有奖征文活动第二期如约而至&#xff01;在上一期的基础上&#xff0c;我们精心策划了更多样化的主题&#xff0c;旨在为开发者们提供一个更广阔的交流平台。无论您是想探讨HarmonyOS的技术细节&#xff0c;还是分享您的开发经验&#xff0c;或是记录您与Ha…

解决发布web接口时数据无法JSON化的问题

解决HTTP接口传输中的JSON序列化问题 引言 当涉及到复杂的数据类型时&#xff0c;如浮点数、Numpy数组、pandas等&#xff0c;直接使用Python的json模块进行序列化可能会遇到问题。本文将解决这些问题&#xff0c;并提供一个通用的方案&#xff0c;确保数据能够顺利地通过HTT…