惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google DeepMind News
Google DeepMind News
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
N
Netflix TechBlog - Medium
Y
Y Combinator Blog
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
V2EX - 技术
V2EX - 技术
Webroot Blog
Webroot Blog
Google Online Security Blog
Google Online Security Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
AI
AI
N
News and Events Feed by Topic
S
Secure Thoughts
www.infosecurity-magazine.com
www.infosecurity-magazine.com
The Cloudflare Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Tailwind CSS Blog
Vercel News
Vercel News
V
Vulnerabilities – Threatpost
Spread Privacy
Spread Privacy
Know Your Adversary
Know Your Adversary
人人都是产品经理
人人都是产品经理
I
Intezer
Schneier on Security
Schneier on Security
Martin Fowler
Martin Fowler
J
Java Code Geeks
K
Kaspersky official blog
H
Heimdal Security Blog
O
OpenAI News
I
InfoQ
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
云风的 BLOG
云风的 BLOG
Hacker News - Newest:
Hacker News - Newest: "LLM"
Blog — PlanetScale
Blog — PlanetScale
S
Schneier on Security
S
Security @ Cisco Blogs
Security Latest
Security Latest
PCI Perspectives
PCI Perspectives
H
Hacker News: Front Page
C
CERT Recently Published Vulnerability Notes
博客园_首页
The Last Watchdog
The Last Watchdog
罗磊的独立博客
L
LINUX DO - 热门话题
U
Unit 42
月光博客
月光博客
Security Archives - TechRepublic
Security Archives - TechRepublic
Scott Helme
Scott Helme

博客园 - smil、梵音

C语言标准(C89/C90)中的32个关键字全列表 Windows 系统的 vscode 通过 Remote-SSH 连接虚拟机的 Ubuntu 系统运行 C 语言的代码 Windows 系统 vscode Remote-SSH 远程连接虚拟机里面的Ubuntu系统的失败处理 Ubuntu虚拟机里安装了SSH,开启SSH服务的时候报错 VS Code的Remote - SSH功能 Ubuntu系统里面安装 g++ ,sudo apt update 的含义 c语言用gcc编译过后,执行 ./hello.c 报错 ./hello.c: 权限不够 windows系统的虚拟机里面的Ubuntu系统安装VMware Tools Ubuntu的应用中心搜索 vscode 的时候,筛选条件为Snap包、debian包是什么意思,如何安装vscode Ubuntu系统是否就是Linux系统,安装软件和Windows系统有何区别 Ubuntu系统里面vscode运行C语言的第一个 Hello World 程序 vscode 中安装C/C++相关的插件 Ubuntu 安装一个轻量级的中文输入法Fcitx5 Ubuntu安装百度网盘 Ubuntu系统里面安装vscode 乌版图系统截屏快捷键 Ubuntu 系统里面运行C++ TortoiseGit 的安装与汉化 安装虚拟机+ ubuntu24.04 系统 联想小新安装 ubuntu24.04 双系统 | 安装乌版图系统 | windows安装 ubuntu24.04 双系统 利用faststone capture制作gif动图 Sublime Text 常用编辑快捷键速查表 vscode 中的 css 样式代码不显示折叠图标的解决方法 IDEA中git的Cherry-Pick的可视化使用(个人总结) IDEA中git的Cherry-Pick的使用 IDEA中如何实现git的cherry-pick可视化操作? Windows11添加系统环境变量 VS Code——Live Server的简介、安装与使用 vue3中 pinia 的运用 vscode使用region折叠任意想折叠的代码块 我本地分支代码推送到远程的另一个分支,怎么操作? idea中打开多文件编辑器换行展示 本地代码强制覆盖远程代码,本地代码强制和远程某一个分支保持一致,再覆盖远程代码 css头部固定,内容区域高度自适应剩余的屏幕高度,内容区域过多显示竖向滚动条 flex为1的元素宽度自适应的同时,文本太长的时候显示省略号 idea中项目文件目录消失如何解决 vue3插入图片 vue3使用构建工具时,关于本地图片的引用 vue3 中父组件调用子组件的方法,子组件是不是必须暴露方法 如何改变type="checkbox"的input复选框的样式 vue3中非父子组件、非祖先-后代组件之间传递方法 解决 IntelliJ IDEA 中项目右键没有 Git 菜单的问题 关于 ref 为 DOM 元素或子组件实例动态创建引用的总结 Git 合并时出现 Please enter a commit message to explain why this merge is necessary 问题解决 拉取远程其他分支的最新代码
C语言是不是必须得通过gcc编译成可执行的程序?
smil、梵音 · 2026-06-22 · via 博客园 - smil、梵音

问题:

我能不能理解为 gcc hello.c -o hello 是编译,./hello.c 是运行?为什么一定要通过-o输出?我是不是不能直接运行 .c 的文件?是不是以后工作了,都得通过编译 .c 的文件,然后生成一个可执行的程序?因为我是初学者,还不明白以后的工作流程。

答案:

你的理解对了一半,但最关键的一步理解错了,我帮你彻底厘清一下,这对你以后理解编程至关重要。

1. 关于你的理解:“gcc hello.c -o hello 是编译,./hello.c 是运行”?

前半句对,后半句错。

  • gcc hello.c -o hello 确实是编译(更准确地说是“编译+链接”)。

  • ./hello.c 不是运行,这是你试图去“执行”一个文本文件。

正确的运行命令是:

(注意:没有 .c 后缀,名字和 -o 后面跟的名字必须一致)

2. 为什么一定要通过 -o 输出?能不能不写?

可以不写。 如果你只输入:

系统也会编译成功,但它会默认生成一个名字叫 a.out 的文件。这时候你需要运行 ./a.out

为什么老师/教程都强调要加 -o
因为如果你写了好几个练习程序(比如 hello.cmath.carray.c),每次都默认生成 a.out,后面的会把前面的覆盖掉,你就分不清谁是谁了。
-o 的作用就是“起名字”,让你生成的文件叫 hellomatharray,一目了然。

3. 我是不是不能直接运行 .c 的文件?

绝对不能。 原因很简单:

  • .c 文件里写的是人类认识的英文和符号#include, printf)。

  • 电脑的 CPU 只认识 0 和 1(机器码),它完全看不懂 #include 是什么意思。

所以必须通过 gcc 这个“翻译官”,把你的英文代码翻译成 CPU 认识的 0 和 1,生成一个可执行文件(在 Linux 下就是 hello 这种没有后缀的文件)。你直接运行 .c 文件,系统会报错“权限不够”或“无法执行二进制文件”,因为它根本看不懂。

打个比方.c 文件就像一份中文写的“施工图纸”(人类看得懂),而 gcc 是施工队,-o 生成的文件是盖好的“大楼”(机器能住进去运行)。你不能把一张图纸直接当房子住进去,对吧?

4. 以后工作了,是不是都得先编译再运行?

是的,只要是 C/C++ 语言,这编译的步骤永远躲不掉。 但工作后的“编译方式”会和你现在不太一样。

  • 现在(学习阶段):你只有一个 .c 文件,所以手敲 gcc hello.c -o hello 最直接。

  • 以后(工作/项目阶段):一个项目可能有几百个 .c.h 文件。如果还一个个手敲 gcc,会累死人。所以工作后用 MakefileCMake 工具,把所有的编译命令写在一个文件里,只需要敲一个 makebuild 命令,系统就会自动帮你把几百个文件全部编译成最终的可执行程序。

但是!工作的基础就是你现在练的。即使是 make,底层归根结底还是执行 gcc 命令。你现在亲手敲 gcc -o,就是在打底子,以后用自动化工具时才不会发懵,出了编译报错才能看得懂。

✅ 给你最核心的总结

以后写 C 语言,永远记住这 3 条命令

操作 命令 解释
1. 写代码 gedit hello.c 或 VSCode 编辑 编写源代码(施工图纸)
2. 编译 gcc hello.c -o hello 翻译成机器码(盖大楼)
3. 运行 ./hello 执行大楼(注意:不带 .c

只要跑通这 3 步,你的第一个程序就彻底成功了。以后你学到的所有复杂概念(多文件编译、静态库、动态库)都是基于第 2 步的扩展。放心,你现在练的就是最纯正的底层功底!