C语言规范

C语言规范

一、花括号{}的省略

  • 省略花括号的唯一核心原则是:

    核心原则:控制语句下方只有「一条语句」时

    ifelseforwhiledo...while 的控制范围内只有紧随其后的第一条语句时,花括号 {} 可以省略。

二、缩进(tab)影不影响运行

完全不影响。

在 C 语言中,换行符、空格、Tab(制表符) 统称为“空白字符”(Whitespace)。对于编译器(翻译代码给电脑听的程序)来说,这些全是透明的,它根本不在乎

缩进(按 Tab)的核心作用是表现逻辑的层级关系

  • 如果不缩进: 就像读一篇没有标点、没有段落的文章,你很难一眼看出来哪个 if 管着哪行代码,哪个括号匹配哪个括号。
  • 缩进后: 你一眼就能看出:“哦,这行 printf 是属于 for 循环里面的子动作”。

坚持缩进: 虽然不影响运行,但一定要养成层级对齐的好习惯。这是程序员的“脸面”。通常只要遇到 {,下一行就开始缩进(按一次 Tab)。遇到 },缩进就退回一级。

使用自动格式化工具: 你不需要手动敲空格对齐。绝大多数写代码的软件都有“一键排版”功能:

  • VS Code:Shift + Alt + F
  • Visual Studio:Ctrl + K,松手后再按 Ctrl + D
  • Dev-C++: 菜单栏里通常有 Astyle -> Format Code

三、花括号同行/次行

我问了问哈基米:

这是一个非常经典的问题,在程序员界甚至被称为“圣战”(Holy War)。这两种写法都有各自的名字和庞大的支持群体。

要想写得像个“资深程序员”,关键不在于你选哪一种,而在于你是否理解它们背后的逻辑,以及你能否在项目中保持绝对的统一

下面我为你详细分析这两种主流写法,并给出建议。


1. 写法一:同行风格 (K&R Style / One True Brace Style)

左花括号 { 紧跟在语句的同一行,右花括号 } 单独占一行。

1
2
3
for (int i = 0; i < 10; i++) {
printf("%d\n", i);
}
  • 来源: 源自 C 语言之父 Kernighan 和 Ritchie 的经典著作《C程序设计语言》(The C Programming Language)。
  • 谁在用:
    • Linux 内核及大多数 Unix/Linux 开源项目。
    • Java、JavaScript、Go、Rust 等语言的官方推荐标准。
    • Google 的 C++ 代码规范。
  • 优点:
    • 紧凑: 可以在一屏内显示更多代码逻辑,减少滚屏次数。
    • 节奏感: 代码阅读视线流畅,不会被过多的空白行打断。
  • 给人感觉: 极客、老派 Unix 黑客、现代全栈开发。

2. 写法二:次行风格 (Allman Style / ANSI Style)

左花括号 { 换行,与 for 对齐,右花括号 } 也对齐。

1
2
3
4
for (int i = 0; i < 10; i++)
{
printf("%d\n", i);
}
  • 来源: Eric Allman(Sendmail 的作者)。
  • 谁在用:
    • C# (Microsoft) 的官方标准。
    • Visual Studio 的默认 C++ 格式化设置。
    • 很多嵌入式开发团队(因为嵌入式代码逻辑复杂,强调块的清晰度)。
  • 优点:
    • 对称美: 括号上下对齐,视觉上更容易看清代码块的开始和结束。
    • 清晰: 对于初学者或者在处理非常长的嵌套循环时,不容易看错层级。
  • 给人感觉: 严谨、企业级开发、微软系风格。

3. 怎样才更像“资深程序员”?

资深程序员并不会因为你用了哪种风格而觉得你不专业,但如果出现以下情况,他们会觉得你是新手

  1. 混用(最忌讳): 一会儿写在后面,一会儿换行写。

    资深的做法: 在一个文件中,甚至整个项目中,严格保持一种风格。

  2. 不遵循团队规范: 假如你进了一个公司,已有代码全是“换行写”,你非要“同行写”,这就不专业。

    资深的做法: 入乡随俗。

  3. 缩进混乱: 无论花括号放哪,如果不正确缩进(通常是 4 个空格或 1 个 Tab),那就是大忌。

4. 给你的建议

既然你是物联网工程专业的学生,正在学 C 语言

  • 推荐写法:同行风格 (K&R Style)

    C

    1
    2
    3
    for (int i = 0; i < 10; i++) {
    // 循环体
    }

    理由: C 语言的经典书籍和大多数 C 语言库(如标准库源码)都采用这种风格。它更符合 C 语言“紧凑、高效”的气质。而且当你以后接触 Java 或 Python(Python虽然没括号,但也是冒号紧跟)等其他语言时,这种习惯更通用。

  • 例外情况: 如果你使用的是 Visual Studio (IDE) 编写 C 代码,它默认会帮你换行。这种情况下,顺应 IDE 的默认设置即可,不用刻意去改。

总结

  • 大众化: 同行风格(K&R)在所有编程语言中占比更高。
  • 阅读方便: 见仁见智,Allman 风格对新手更友好,K&R 风格阅读效率更高。
  • 资深感: 一致性才是资深的标志。

在这个阶段,建议你强迫自己使用 K&R 风格(同行写),这是 C 语言最正统的“血脉”。


要在 VS Code 里实现自动格式化,并且强制让它按照我们刚才说的 K&R 风格(花括号不换行) 来排版,只需要简单的三步配置。

请跟着我操作:


第一步:确保安装了 C/C++ 插件

VS Code 本身只是一个编辑器,它需要插件才能读懂 C 语言。

  1. 点击左侧侧边栏的 扩展图标(或者按 Ctrl + Shift + X)。
  2. 搜索 C/C++
  3. 安装由 Microsoft 开发的那个官方插件(通常是下载量最高的那个)。 (如果你已经能运行代码了,这一步通常已经做好了)

第二步:学会手动格式化(快捷键)

这是最基础的技能。当你写了一堆乱糟糟的代码时:

  • 快捷键(Windows): Shift + Alt + F
  • 右键菜单: 在代码编辑区点击右键 -> 选择 **“格式化文档” (Format Document)**。

试一下,你会发现代码瞬间整齐了。但是,默认情况下它可能还是会把花括号换行(这是微软的默认风格),我们需要在第四步改掉它。


第三步:设置“保存时自动格式化”(核心技巧)

真正的资深程序员是不会手动去按格式化快捷键的。我们将它设置为“只要按下 Ctrl+S 保存,代码自动变整齐”。

  1. 点击左下角的 齿轮图标 -> **设置 (Settings)**(或者按快捷键 Ctrl + ,)。
  2. 在顶部的搜索框输入:format on save
  3. 找到 Editor: Format On Save 这一项,把前面的勾 打上

现在的效果: 你随便写一行乱代码,比如 for(int i=0;i<5;i++){,然后按 Ctrl + S,你会发现空格自动补全了,缩进也自动调整了。这就是“如丝般顺滑”的体验。


第四步:调整风格为 K&R(花括号不换行)

默认的 C/C++ 插件可能会使用 “Visual Studio” 风格(花括号换行)。为了实现你想要的 K&R 风格(同行写法),我们需要改一下配置:

  1. 继续在 设置 (Settings) 里,搜索框输入:clang_format_fallbackStyle
  2. 你会看到一个选项叫 C_Cpp: Clang_format_fallback Style
  3. 把它默认的 Visual Studio 改为 LLVM 或者 **Google**。
    • 推荐填入: LLVM
    • (注:LLVM 风格就是标准的 K&R 风格,花括号不换行,且缩进合理,非常适合 C 语言)

四、visual studio创建.c/.cpp

在 Visual Studio (VS) 中学习 C 语言,**必须手动将后缀名改为 .c**。

虽然 VS 默认只有 .cpp (C++) 的选项,但它完全支持 C 语言,只需要你通过“改名”来告诉它。

为什么一定要用 .c

  1. 编译规则不同:
    • **.c**:VS 会调用 C 编译器。这是你现在学的,语法严格符合 C 标准(如 malloc 不需要强制类型转换)。
    • **.cpp**:VS 会调用 C++ 编译器。虽然 C++ 兼容大部分 C,但它们是两种语言。如果用 .cpp 写 C,可能会遇到很多“莫名其妙”的报错(因为 C++ 的类型检查更严),或者让你养成了写“不纯正 C 代码”的坏习惯。
  2. 身份识别: 这能明确告诉 IDE 和其他读你代码的人:“这是一份纯 C 语言代码”。

C语言规范
http://example.com/2025/12/24/C语言规范/
作者
王柏森
发布于
2025年12月24日
许可协议