如何在linux终端上编译并运行一行?

onl*_*227 2 c linux terminal gcc

每次我编译并运行c文件时,我都要输入:

gcc filename.c

的a.out

我不想在两行中这样做,如何在linux终端上编译并运行一行?

ex *_*ilo 6

快速而肮脏的解决方案是错误的

在 C 语言中,快速而肮脏的解决方案是一个非常糟糕的主意:

gcc myfile.c && ./a.out
Run Code Online (Sandbox Code Playgroud)

如果编译失败,则不会运行可执行文件,但是当编译成功时,即使发出警告,代码也会自动运行;在 C 中,在尝试运行代码之前,您应该至少检查警告。大多数情况下,您不应该运行编译时带有警告的代码。通常运行带有警告的代码意味着代码有一些未定义的行为;你不应该这么盲目地跑步。当然,如果像上面的代码那样至少有警告,那么无论如何,当应该有警告时,可能不会有很多警告。至少应该使用:

gcc myfile.c -Wall -Wextra -Werror && ./a.out
Run Code Online (Sandbox Code Playgroud)

使用-Wall -Wextra会对许多带来未定义行为的愚蠢错误发出警告-Werror,并使编译后带有警告的代码不会自动运行。

更好的解决方案

为了解决这个问题,并减少输入,我曾经使用保存crepl在搜索路径中的 bash 脚本:

gcc myfile.c && ./a.out
Run Code Online (Sandbox Code Playgroud)

当我想快速测试保存在例如 中的一些源代码时myfile.c,我可以在命令行输入:

crepl myfile.c
Run Code Online (Sandbox Code Playgroud)

如果编译失败,代码将不会运行,如果编译时出现警告,代码也不会运行,这要归功于-Werror. 如果编译成功,则程序运行,运行后临时可执行文件被删除。

改进

自从最初写这个答案以来,我已经将我的解决方案发展成一个稍微更花哨的 bash 脚本,它接受编译器的可选进一步参数、链接库等。

gcc myfile.c -Wall -Wextra -Werror && ./a.out
Run Code Online (Sandbox Code Playgroud)

现在,如果我需要链接,例如数学库:

crun myfile.c -lm
Run Code Online (Sandbox Code Playgroud)

成功了,如果有任何错误或警告(达到合理的水平)就会失败,并自行清理。