你好。我在一个充满面试问题的网站上发现了这个问题,并且被它难倒了。是否有一些预处理器指令允许在编译期间从标准输入读取?
编写一个小型C程序,在编译时从输入终端获取另一个程序,并在运行时给出第二个程序的结果。 (注意:关键是,想想UNIX)。假设,程序是1.c然后,编译时
$ cc -o 1 1.c
int main() { printf("Hello World\n"); } ^D
$ ./1
Hello World
编辑事实证明这个问题完全重复。 How to write program during compiling?
答案 0 :(得分:58)
#include "/dev/stdin"
就是诀窍。
充其量只是一个愚蠢的面试问题。
答案 1 :(得分:3)
本着一种胜人一筹的精神,我试图制作一个更加平台/环境独立的版本。但是,我被困在这里...所以这是我的问题,我能替换什么'???'与?
#ifdef _WIN32
#include ???
#else
#include "/dev/stdin"
#endif
编辑:感谢ohmantics我现在可以得到这份工作:
#ifdef _WIN32
#include "CON"
#else
#include "/dev/stdin"
#endif
答案 2 :(得分:1)
您需要告诉编译器从标准输入中获取其源代码输入,然后编译它。很可能有一个命令行参数。
这样,您可以将另一个程序的输出传输到编译器中。
编辑像往常一样,Stack Overflow already had an answer for this.
echo "int main() { return 0; }" | gcc -x c -
编辑在编译语句时错过了。然而,管道技巧仍然有效,所以我会留在那里。