003、安全开发篇(一):项目搭建第一个 C 语言程序
返回:安全开发篇(一)目录 · 上一篇:002、Visual Studio 安装与配置 · 下一篇:004、C 语言程序架构
对应视频:1.2 基础-项目搭建第一个C语言程序.mp4
1、学习目标
这一节要完成第一个 C 语言控制台程序。重点不是 Hello World 本身,而是理解一个程序从源文件到可执行文件的大致流程。
目标清单:
- 创建空项目;
- 添加
.c源文件; - 写出最小 C 程序;
- 编译并运行;
- 能说明源代码、编译和运行结果之间的关系。
2、创建空项目
初学阶段建议创建 空项目,不要直接使用自动生成大量文件的模板。空项目最干净,能让每一个源文件都看得见来龙去脉。
项目命名可以按实验主题来:
| 场景 | 示例 |
|---|---|
| 第一个程序 | hello_c |
| 函数实验 | function_demo |
| 数组实验 | array_demo |
| 指针实验 | pointer_demo |
| 字符串实验 | string_demo |
不要把所有实验都塞进同一个工程。一个主题一个小项目,后面复盘、定位错误和整理笔记都会清楚很多。
3、添加源文件
空项目本身没有代码,需要手动添加源文件。
| 文件后缀 | 含义 |
|---|---|
.c |
按 C 语言方式编译 |
.cpp |
按 C++ 方式编译 |
.h |
头文件,常用于声明函数、结构体、宏和公共接口 |
当前阶段以 C 语言为主,源文件可以命名为 main.c。
4、第一个程序
1 |
|
这段代码包含了四个最基础元素:
| 元素 | 作用 |
|---|---|
#include <stdio.h> |
引入标准输入输出头文件 |
int main(void) |
程序入口函数 |
printf |
向控制台输出内容 |
return 0 |
正常结束程序 |
5、编译与运行
运行前,源代码需要先被编译成可执行程序。
| 阶段 | 简单理解 |
|---|---|
| 编写源代码 | 写 .c 文件 |
| 预处理 | 处理 #include、宏等预处理指令 |
| 编译 | 把 C 代码翻译成目标代码 |
| 链接 | 把目标代码和库函数连接起来 |
| 运行 | 操作系统加载可执行文件并执行 |
初学阶段不需要一次性掌握编译链接细节,但要先知道:源文件不是直接运行的,运行的是构建出来的 .exe。
6、常见错误
| 错误 | 可能原因 | 处理方式 |
|---|---|---|
找不到 printf |
没有包含 stdio.h |
补上 #include <stdio.h> |
| 缺少分号 | 语句结尾忘写 ; |
查看错误行附近 |
| 找不到入口点 | 没写 main 或函数名拼错 |
检查 int main(void) |
| 无法编译 | 文件后缀、项目配置或组件缺失 | 检查 .c 文件和 VS 工作负载 |
7、安全开发观察
第一个程序虽然很小,但已经能连接后续安全开发:
main是入口点,逆向分析时也会关注程序从哪里开始执行;printf是库函数调用,后续会看到更多 API 调用;- 字符串常量会进入程序的数据区域;
- 编译链接会生成可执行文件,后续 PE 文件分析会继续展开。
8、复盘题
8.1 .c 和 .cpp 后缀有什么区别?
.c 通常按 C 语言规则编译,.cpp 按 C++ 规则编译。两者语法兼容一部分,但不是完全相同;安全开发入门阶段要先确认当前示例到底按哪种语言规则构建。
8.2 为什么建议从空项目开始?
空项目不会自动生成多余文件,适合观察最小 C 程序的结构。这样更容易理解源文件、入口函数、头文件和编译运行之间的关系。
8.3 return 0 表示什么?
在 main 中,return 0 通常表示程序正常结束,并把退出状态返回给操作系统。
这一节结束后,要能独立新建空项目、添加 main.c、写出最小程序并成功运行。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ruiqy~!


