大学第一门编程课叫 C 语言,进实验室发现项目全是 C++,新生的疑问基本都一样:c语言和c++的区别和联系到底在哪,学了 C 会不会白学?先给结论:C++ 是在 C 的基础上长出来的,语法大部分兼容,设计思路差得不少,C 打的地基一点不白费。
联系:C++ 基本兼容 C
C 语言诞生于 1972 年前后,追求贴近硬件、执行快,代码按函数一步步往下走,这种风格叫面向过程。后来 Bjarne Stroustrup 在 C 的基础上加了对类、继承、封装的支持,发展成 C++。所以多数合法的 C 代码在 C++ 编译器里也能编过,变量、指针、数组、条件循环这些地基是通用的,学会 C 再学 C++ 不亏。
区别:三块主要差异
- 编程范式:C 以面向过程为主,C++ 额外支持面向对象和泛型编程,类、模板、STL 标准库都是 C 里没有的
- 标准库:C 用 printf、scanf 这一组,头文件带 .h;C++ 既能用旧库,也有 iostream、string、vector 这套,写起来省心
- 内存管理:C 用 malloc 和 free 手动申请释放,C++ 用 new 和 delete,还能靠智能指针自动回收
编译环境也有差别:Linux 下编 C 一般用 gcc,编 C++ 常用 g++,源文件后缀一个 .c 一个 .cpp,混着编容易报链接错误。
各自的用武之地
C 至今活跃在操作系统内核、单片机、驱动这些对体积和速度抠到极致的场合;C++ 常见于游戏引擎、图形处理、高性能服务端,既要抽象能力又不能牺牲速度。纯业务系统和算法研究则更多用 Python、Java 这类更高层的语言。
给个实际判断:目标是嵌入式、底层开发,先把 C 学扎实;想做游戏、客户端、高性能后端,把c语言和c++的区别和联系理清楚再选路线,C++ 学习周期长,但 C 语言打的基础全用得上,不存在白学一说。