.out 文件是类Unix系统(Linux、macOS、FreeBSD等)下,C/C++/C#等编译型语言默认的可执行文件 ,是编译器(gcc/g++/clang)编译链接源代码后生成的二进制可执行程序 ,和Windows系统里的 .exe 文件功能完全一致,只是不同系统的可执行文件格式(.out是ELF格式、.exe是PE格式)和后缀约定不同。
核心关键信息
-
为什么默认是.out?
早期Unix系统的编译器(a.out编译器),会把编译链接后的可执行文件固定命名为
a.out(a 代表 assembler 汇编器,out 代表 output 输出),这个命名习惯一直沿用到现在,gcc/g++/clang 编译时如果不指定可执行文件名称 ,就会默认生成a.out。例:直接用
gcc test.c编译C文件,会自动生成a.out;用g++ test.cpp编译C++文件,也是默认生成a.out。 -
怎么自定义可执行文件名称(避免a.out)?
编译时用
-o参数(output 缩写)指定名称即可,这是实际开发中最常用的方式,一般会把后缀去掉,直接用项目/功能命名。例:
bashgcc test.c -o myapp # 编译后生成 可执行文件myapp(无后缀) g++ test.cpp -o calc # 编译后生成 可执行文件calc(无后缀) -
怎么运行.out文件?
类Unix系统中不能直接双击运行 ,需要在终端 中通过路径 执行,核心是加
./(表示「当前目录」,系统默认不会在当前目录找可执行文件,必须显式指定)。例:
bash./a.out # 运行当前目录下的a.out ./myapp # 运行自定义名称的可执行文件myapp /home/xxx/a.out # 运行绝对路径下的a.out -
.out文件能跨系统运行吗?
不能!和Windows的.exe一样,
.out是平台相关的二进制文件:- Linux下生成的a.out,不能在macOS/Windows上运行;
- macOS下生成的a.out,不能在Linux/Windows上运行;
跨系统需要重新在对应系统上编译源代码。
-
补充:不是所有.out都是可执行文件
极少数情况下,部分工具/编译器会把输出日志、调试信息、目标文件 也命名为.out,但这种情况非常少见,99%的场景下,编程中遇到的.out都是可执行文件。
和Windows的.exe文件对比
| 特性 | .out文件(类Unix) | .exe文件(Windows) |
|---|---|---|
| 核心功能 | 二进制可执行程序 | 二进制可执行程序 |
| 默认生成 | gcc/g++/clang 无-o参数时生成 | MSVC/MinGW 无指定时生成 |
| 运行方式 | 终端 ./文件名 |
双击/命令行直接输文件名 |
| 底层格式 | ELF(可执行链接格式) | PE(可移植可执行格式) |
| 跨平台性 | 仅对应类Unix系统可用 | 仅Windows系统可用 |
总结
.out是类Unix系统的默认可执行文件 ,等价于Windows的.exe;- 编译时用
-o 自定义名称可避免生成a.out,实际开发中几乎都会这么做; - 运行需在终端执行,核心是加
./指定当前目录,格式为./文件名; - 是平台相关的二进制文件,无法跨系统运行。