在Linux下运行C程序

在Linux下运行C程序,c,linux,C,Linux,有人能给我解释一下为什么我们使用/a.out来运行程序吗 这背后有什么意义吗 有人能解释一下吗 如果你指的是/部分,那是为了安全。默认情况下,Windows会将当前目录附加到路径,这是错误的(存在DLL注入等风险)。 如果您指的是a.outpart,那么它只是一个名称(来自格式a.out的名称),您可以通过修改gcc-o参数来更改它。该名称代表,并且是(现在仍然是)编译器生成的可执行文件的默认名称。您需要将/放在它前面的原因是当前目录()不在$PATH中,因此必须明确指定可执行文件的路径。运行类

有人能给我解释一下为什么我们使用/a.out来运行程序吗

这背后有什么意义吗


有人能解释一下吗

如果你指的是
/
部分,那是为了安全。默认情况下,Windows会将当前目录附加到路径,这是错误的(存在DLL注入等风险)。
如果您指的是
a.out
part,那么它只是一个名称(来自格式a.out的名称),您可以通过修改gcc-o参数来更改它。

该名称代表,并且是(现在仍然是)编译器生成的可执行文件的默认名称。您需要将
/
放在它前面的原因是当前目录(
)不在
$PATH
中,因此必须明确指定可执行文件的路径。

运行类似于shell的bash的可执行文件时,可执行文件必须位于
PATH
环境变量中,以便
bash
定位并运行程序

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

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

gcc -o mynewprogram mynewprogram.c

a、 out是编译器的默认名称。这是因为链接过程被跳过,并且没有编译为对象或库

你应该多看看C和C程序编译的方式

基本上,您的源代码被发送到预处理器,在那里像
#define
#include
这样的指令被加载(例如,加载到内存中)。因此,您要使用的任何库都会被加载,例如

#include <math.h>
#包括
基本上将
math.h
的内容“粘贴”到定义它的源代码中


一旦所有这些内容都被扩展,编译器将把源代码转换成目标代码,这是二进制代码中的源代码a.out是输出的默认名称,如果您没有指定生成名称。

不知何故,这并没有描述其背后的含义。这只是语法,对不起。好了,来吧。请你把你的问题表述得更准确些好吗。你不明白的是什么?在
a.out
前面的
/
a.out
本身?你在寻找什么样的意义?相反。格式“aout”(在任何现代系统上不再使用)的名称来自文件名
a.out
,这是unix系统上“汇编程序输出”的传统文件名。