有人可以向我解释为什么我们使用 ./ a.out 来运行程序?
这背后有什么意义吗?
有人可以提供解释吗?
答案 0 :(得分:9)
该名称代表"assembler output",并且(现在仍然是)编译器生成的可执行文件的默认名称。你需要./
的原因是因为当前目录(.
)不在$PATH
中,因此必须明确给出可执行文件的路径。
答案 1 :(得分:3)
如果您的意思是./
部分,那就是为了安全起见。 Windows默认情况下将当前目录附加到PATH,这是不好的(存在DLL注入的风险,依此类推)。
如果你的意思是a.out
部分,它只是一个名称(来自格式a.out的名称),你可以通过修改gcc -o参数来改变它。
答案 2 :(得分:2)
当运行像bash这样的shell这样的可执行文件时,可执行文件必须位于PATH
bash
的{{1}}环境变量中才能找到并运行该程序。
./
前缀是指定可执行文件的完整路径的简写方式,因此bash不需要查询PATH变量(通常不包含当前目录)来运行它。 / p>
[对于a.out
(“汇编程序输出”的缩写),如果没有指定输出文件名,它是gcc
之类的编译器的默认可执行输出。]
答案 3 :(得分:1)
值得你多看一下C和C程序编译的方式。
基本上,您的源代码会发送到预处理器,其中会加载#define
和#include
等指令(例如,加载到内存中)。因此,您要使用的任何库都会被加载,例如
#include <math.h>
基本上会将math.h
的内容“粘贴”到源代码中定义的位置。
一旦扩展了所有这些内容,编译器就会将您的源代码转换为目标代码,这是二进制代码的源代码。如果您未指定构建名称, a.out 是输出的默认名称。
答案 4 :(得分:0)
gcc -o mynewprogram mynewprogram.c
a.out是编译器的默认名称。 AFAIK是因为跳过了链接过程而且它没有被编译为对象或库。