在Linux中运行一个C程序

有人可以向我解释为什么,特别是我们使用./a.out来运行一个程序吗?

这背后有什么意思吗?

有人可以提供一个解释吗?

该名称代表“汇编输出” ,并且(现在仍然是)编译器生成的可执行文件的默认名称。 之所以需要./是因为当前目录( . )不在$PATH因此必须明确给出可执行文件的路径。

如果你的意思是./部分,这是为了安全。 Windows默认将当前目录附加到PATH,这是不好的(有DLL注入的风险,等等)。 如果你的意思是a.out部分,它只是一个名字(来自格式a.out的名字),你可以通过修改gcc -o参数来改变它。

当像bash那样运行像shell这样的可执行文件时,可执行文件必须位于PATH环境变量中,以供bash找到并运行程序。

./前缀是指定可执行文件完整路径的简写方法,因此bash不需要查阅PATH变量(通常不包含当前目录)来运行它。

[对于a.out (“汇编程序输出”的简称),如果没有指定输出文件名,则它是gcc编译器的默认可执行输出。]

这将是值得你多看一些C和C程序编译的方式

从本质上讲,你的源代码被发送到预处理器 ,其中像#define#include这样的指令被加载(例如到内存中)。 所以你要使用的任何库都被加载,例如

 #include <math.h> 

将基本上将math.h的内容“粘贴”到定义点的源代码中。

一旦所有这些东西都被扩展出来, 编译器就会将你的源代码转换成二进制代码中的源代码。 如果不指定构建名称,则a.out是输出的默认名称。

 gcc -o mynewprogram mynewprogram.c 

a.out是编译器的默认名称。 AFAIK这是因为链接过程被跳过,它不被编译为对象或库。