🔷 第一章 初识C++
📄 一句话概括

一个 C++ 工程文件夹里有四种角色:.dev 工程文件(记账本,记录本工程有哪些源文件、用什么编译选项)、.cpp 源文件(正文,你写的代码)、.o 中间产物(编译器翻译出的半成品机器码片段)、.exe 可执行程序(链接后的成品,双击就能跑);外加一个 Makefile.win(给编译器看的"施工图")。命根子是 .cpp 和 .dev——.o/.exe 删了能重新生成,.dev 删了工程就打不开了。

一、四种角色一目了然

文件 谁生成 作用 能不能删
.dev 新建工程时 Dev-C++ 生成 记录工程包含哪些文件、编译选项、输出名 不能删(删了工程结构就丢了)
.cpp 你写 代码正文 不能删(删了代码就没了)
.o 编译时由编译器生成 单个源文件编译出的机器码片段,还没拼装 可以删(重编就有)
.exe 编译+链接后生成 最终程序,双击能运行 可以删(重编就有)
Makefile.win Dev-C++ 生成 记录"先编哪个、后链哪个、用什么参数" 可以删(会自动重建)

记忆锚:.cpp 是菜谱,.o 是切好的备料,.exe 是端上桌的菜,.dev 是点菜单。

二、从源码到成品:两步走

  1. 编译(Compile)——把每个 .cpp 单独翻译成 .o。这一步只管"这个文件语法对不对"
  2. 链接(Link)——把所有 .o 加上需要的库拼成一个 .exe

为什么分开:一个工程可能有 20 个 .cpp,改其中 1 个只需重编那 1 个(省时间);这也是 1.1.3 说"改一行要重编译"能被缓解的原因——编译是按文件算的。

新手最常踩的坑来自这一步:报错信息里出现 undefined reference to ...(链接错误),意思是"某个函数你用了,但没人提供它的实现"——先把文件都加进工程(第三节)再看。

三、多文件工程:为什么需要 .dev

单文件练习时,.dev 看着多余。但一旦程序分成多个源文件(比如 main.cpp 调用 tools.cpp 里的函数):

动手习惯:以后每个练习都建工程(File → New → Project,选 Console Application → C++),而不是只建源文件——将来文件变多不会返工。

四、动手 Demo:看清自己的工程目录

第一步:在 Dev-C++ 里 File → New → Project,选 Console Application、语言选 C++,工程名写 hello,保存到 D:\cpp\hello(纯英文路径)。看到什么算成功:左侧工程面板出现树状结构(工程名 + main.cpp),编辑区自动打开一份带 main() 的模板代码。

第二步:按 F11 编译,然后到资源管理器看目录:

Get-ChildItem "D:\cpp\hello" | Select-Object Name, Length, LastWriteTime

看到什么算成功:列出 hello.dev、main.cpp(可能含 Makefile.win)。编译之后再看一次,会多出 hello.exe(可能还有 .o)——这就是"源码 → 成品"的实物证据。

第三步(实验):把 hello.exe 剪切到桌面,双击运行——看到什么:程序照样跑。结论:.exe 是独立成品;但双击 hello.cpp 只会打开记事本,因为源码不能"直接运行",必须经编译器(1.1 的"编译型"在这里落地)。

30 秒实验:把工程文件夹整个复制一份改名 hello_bak,双击里面的 .dev 能正常打开——这就是"备份工程"的正确姿势:拷文件夹(含 .dev 和 .cpp),而不是只拷 .exe。

五、常见误区

  1. "只留 exe 就行,源码不重要"——.exe 是成品,但改需求就得回到源码;源码+工程文件才是资产(这条规律放大到软件公司也一样)
  2. "双击 cpp 文件就能运行"——不会。.cpp 是纯文本,必须有编译器翻译(这也解释了为什么"没装编译器就写不了 C++")
  3. "多文件工程是高手才用的"——是组织代码的基本功;从第一个练习就用工程模式,后面省心
  4. "报错都是语法错"——分两类:编译错误(语法/拼写,指出行号)和链接错误(找不到实现,检查文件是否加入工程);先分清哪一类,再动手改
自测三问(点开对答案) 1. 工程文件夹的四种主要文件?——`.dev`(记账本)、`.cpp`(正文)、`.o`(中间产物)、`.exe`(成品);另有 `Makefile.win`(施工图)。 2. 编译和链接分别做什么?——编译=每个 `.cpp` 单独翻译成 `.o`(只查本文件语法);链接=把 `.o` 与库拼成 `.exe`。链接错误常因文件没加入工程。 3. 哪些文件不能删?——`.cpp` 与 `.dev`(代码与工程结构);`.o`/`.exe`/`Makefile.win` 可重新生成。

相关笔记