如何使用像 python 这样的 Linux 终端在 gcc 或 g++ 中编译单行 C++ 代码?
How to compile a single line of C++ code in gcc or g++ using Linux terminal like python?
可以在终端运行python命令
示例:
>>> 2 + 3
5
>>>
是否可以编译一行代码而不将其写入文本文件?
不太像 Python 但在类 Unix 系统上你可以使用
here-documents 在终端中键入文本并将其通过管道传输到 gcc
和
运行 输出 a.out
这样的:
(
cat <<EOF
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
puts("Hello World");
return EXIT_SUCCESS;
}
EOF
) | gcc -xc - && ./a.out
输入前两行后:
(
cat <<EOF
开始输入您的程序源代码并输入
EOF
) | gcc -xc - && ./a.out
编译和运行程序。
这里是一个没有错误的单行编译:-
$ echo "int foo() { return 42; }" | gcc -xc -fsyntax-only -c -
这里有一个问题:
$ echo "void foo() { return 42; }" | gcc -xc -fsyntax-only -c -
<stdin>: In function ‘foo’:
<stdin>:1:21: warning: ‘return’ with a value, in function returning void
<stdin>:1:6: note: declared here
-fsyntax-only
指示 gcc 仅解析您的语法,不生成目标文件,我猜这就是您想要的。
Python 没有编译一行代码。它解释一行代码并更新自己的状态,以便下一行代码知道上一行代码的结果。
>>> x = 2 + 3
>>> x + 4
9
这叫做REPL。
对于 C 来说,没有什么比这更可能的了。人们可以设计一个工具来读取和执行一行 C 程序,但是每一行都是一个完整的程序,完全不知道其他任何行。这一点都不有趣。
CERN 开发了一个 C++ 解释器,其功能与 python 解释器的功能完全相同(好吧,不完全是,但非常接近)。您可以在 its website.
上找到更多信息
它在内部大量使用 Clang,因此如果您从源代码构建它,您将需要 LLVM/Clang 可用。
可以在终端运行python命令
示例:
>>> 2 + 3
5
>>>
是否可以编译一行代码而不将其写入文本文件?
不太像 Python 但在类 Unix 系统上你可以使用
here-documents 在终端中键入文本并将其通过管道传输到 gcc
和
运行 输出 a.out
这样的:
(
cat <<EOF
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
puts("Hello World");
return EXIT_SUCCESS;
}
EOF
) | gcc -xc - && ./a.out
输入前两行后:
(
cat <<EOF
开始输入您的程序源代码并输入
EOF
) | gcc -xc - && ./a.out
编译和运行程序。
这里是一个没有错误的单行编译:-
$ echo "int foo() { return 42; }" | gcc -xc -fsyntax-only -c -
这里有一个问题:
$ echo "void foo() { return 42; }" | gcc -xc -fsyntax-only -c -
<stdin>: In function ‘foo’:
<stdin>:1:21: warning: ‘return’ with a value, in function returning void
<stdin>:1:6: note: declared here
-fsyntax-only
指示 gcc 仅解析您的语法,不生成目标文件,我猜这就是您想要的。
Python 没有编译一行代码。它解释一行代码并更新自己的状态,以便下一行代码知道上一行代码的结果。
>>> x = 2 + 3
>>> x + 4
9
这叫做REPL。
对于 C 来说,没有什么比这更可能的了。人们可以设计一个工具来读取和执行一行 C 程序,但是每一行都是一个完整的程序,完全不知道其他任何行。这一点都不有趣。
CERN 开发了一个 C++ 解释器,其功能与 python 解释器的功能完全相同(好吧,不完全是,但非常接近)。您可以在 its website.
上找到更多信息它在内部大量使用 Clang,因此如果您从源代码构建它,您将需要 LLVM/Clang 可用。