初识C语言:从历史到第一个程序

大家好,我是你们这门课的老朋友。做了十几年嵌入式开发,C语言几乎是我每天都要打交道的工具。今天咱们就来聊聊C语言的来龙去脉,以及怎么搭建环境写出第一个程序。

说实话,每次带新人入门,我都不急着让他们敲代码。先搞清楚这东西从哪来、能干啥,心里才有底。你想想看,连工具的历史都不了解,怎么用好它?

C语言的历史与特点

C语言诞生于1972年,贝尔实验室的Dennis Ritchie搞出来的。当时他们想写Unix操作系统,但汇编太痛苦了。于是Ritchie在B语言基础上做了改进,创造了C语言。

我记得刚入行时,前辈跟我说过一句话:「C语言是离硬件最近的高级语言。」这话一点不假。

C语言有几个核心特点,我挑重要的说:

  • 高效——编译后的代码执行效率极高,跟汇编有得一拼。我在做电机控制算法时,同样的逻辑用C写比用Python快了几十倍。
  • 灵活——指针、位运算、内存管理,你能直接操作硬件资源。说白了,C语言给了你一把手术刀,但用不好也会割到自己。
  • 可移植——只要遵循ANSI C标准,代码可以在不同平台间轻松迁移。我曾在ARM和RISC-V之间移植过一套协议栈,改动的代码不到5%。
  • 简洁——C语言的关键字只有32个(C99标准),语法干净利落。

核心认知:C语言是「中级语言」——既有高级语言的抽象能力,又有低级语言的硬件控制力。这也是它在嵌入式领域屹立不倒的原因。

C语言的应用领域

你可能觉得C语言老了。但说实话,它活得比谁都滋润。我这些年接触过的项目,C语言几乎无处不在:

领域 典型应用 为什么用C
嵌入式系统 单片机、RTOS、驱动开发 资源受限,需要直接操作硬件
操作系统 Linux内核、Windows内核 性能和底层控制要求极高
数据库 MySQL、SQLite 需要极致的内存和性能优化
编译器/解释器 GCC、Python解释器 自身就是C语言写的
网络协议栈 TCP/IP、HTTP服务器 高并发、低延迟要求

嗯,这里要注意一点:C语言在嵌入式领域几乎是「统治级」的存在。我做过一个智能家居项目,从传感器数据采集到云端通信,整个链路全是C语言写的。为什么?因为MCU的Flash只有64KB,RAM只有8KB,别的语言根本跑不起来。

开发环境搭建(GCC / VS Code)

工欲善其事,必先利其器。我个人习惯用VS Code + GCC的组合,轻量又好用。下面一步步来:

1. 安装GCC编译器

GCC是GNU编译器套件,C语言的标配。不同系统安装方式不同:

  • Windows:下载MinGW-w64,安装后把bin目录加到系统PATH里。我建议用MSYS2,包管理更方便。
  • macOS:安装Xcode Command Line Tools,终端运行 xcode-select --install
  • Linux:直接 sudo apt install gcc(Ubuntu/Debian)或 sudo yum install gcc(CentOS)。

装完后打开终端,输入 gcc --version,看到版本号就说明成功了。

小技巧:我曾经遇到过PATH没配置好,终端死活找不到gcc命令。解决办法很简单——重启终端,或者手动刷新环境变量。

2. 安装VS Code

VS Code是微软的免费编辑器,插件生态很丰富。安装后需要装几个扩展:

  • C/C++(微软官方)——提供语法高亮、智能提示、调试支持
  • Code Runner——一键运行代码,适合初学者
  • Chinese Language Pack——中文界面,看着舒服

我个人建议再装个Better Comments插件,能让代码注释带颜色,调试时一目了然。

3. 验证环境

新建一个文件夹,比如 C_workspace。在VS Code里打开它,新建文件 hello.c。然后打开终端(Ctrl+`),输入:

gcc hello.c -o hello
./hello

如果没报错,说明环境搭好了。

注意:Windows下编译出来的可执行文件是 .exe,运行时要写 hello.exe。Linux/macOS直接 ./hello 就行。我刚开始用Windows时老忘记加后缀,被坑了好几次。

第一个C程序

好了,环境搭好了,咱们写第一个程序。别小看这个「Hello World」,它包含了C语言最核心的结构。

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

逐行解释一下:

  • #include <stdio.h> —— 引入标准输入输出库。printf函数就在这里面。你可以理解为「借工具」。
  • int main() —— 程序入口。C程序从main函数开始执行,也在这里结束。返回值int表示程序退出状态,0代表正常。
  • printf("Hello, World!\n"); —— 打印字符串到控制台。\n是换行符,让光标移到下一行。
  • return 0; —— 告诉操作系统程序正常结束。

编译运行后,你会看到控制台输出:

Hello, World!

嗯,就这么简单。但别小看这几行代码——它背后涉及了预处理、编译、汇编、链接四个阶段。我当年第一次看到编译过程时,觉得这简直像魔法一样。

避坑指南:我曾经见过新手把main写成了mian,结果编译报错找了半天。记住——C语言是大小写敏感的,Main和main是两个不同的东西。

本章知识体系

下面这张图帮你理清本章的核心脉络:

初识C语言 历史与特点 • 1972年贝尔实验室 • 高效、灵活、可移植 • 离硬件最近的高级语言 应用领域 • 嵌入式系统(统治级) • 操作系统、数据库 • 编译器、网络协议栈 环境搭建 • GCC编译器安装 • VS Code + 插件 • 验证环境 第一个C程序 • #include 引入头文件 • main() 程序入口 • printf() 输出 编译流程 • 预处理 → 编译 • 汇编 → 链接 • 生成可执行文件

这张图把本章内容串起来了。从C语言的历史出发,到它能干什么,再到怎么搭建环境写代码,最后理解编译流程。每一步都是环环相扣的。

好了,第一章就到这里。环境搭好了,程序跑通了,接下来咱们就可以深入C语言的数据类型了。记住——编程不是看会的,是敲会的。多动手,别光看。


公众号:蓝海资料掘金营,微信deep3321