【发布时间】:2018-12-13 14:13:04
【问题描述】:
可以在终端运行python命令
示例:
>>> 2 + 3
5
>>>
可以编译一行代码而不将其写入文本文件吗?
【问题讨论】:
标签: gcc gnome-terminal
可以在终端运行python命令
示例:
>>> 2 + 3
5
>>>
可以编译一行代码而不将其写入文本文件吗?
【问题讨论】:
标签: gcc gnome-terminal
不像在 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
编译并运行程序。
【讨论】:
Python 不会编译任何一行代码。它解释一行代码并更新自己的状态,以便下一行代码知道前一行的结果。
>>> x = 2 + 3
>>> x + 4
9
这叫REPL。
C 不可能有这样的事情。人们可以编写一个工具来读取和执行一行 C 程序,但是每一行都是一个完整的程序,完全不知道任何其他行。这一点都不有趣。
【讨论】:
CERN 开发了一个 C++ 解释器,它完全(嗯,不完全,但非常接近)python 解释器所做的事情。你可以在its website找到更多信息。
它在内部大量使用 Clang,因此如果您从源代码构建它,您将需要可用的 LLVM/Clang。
【讨论】:
这是一个无错误的单行编译:-
$ 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 仅解析您的语法,不生成任何目标文件,我猜这就是您所追求的。
【讨论】: