2011-01-14 43 views
17

可能重复:
How to write program during compiling?奇ç面试问题

嗨,大家好。我在一个充满面试问题的网站上发现了这个问题,并被它困住了。是否有一些预编译指令允许在编译期间从标准输入中读取?

编写一个小的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

我编辑您的样本shell命令来更好地匹配什么,我认为你的意思。如果我错了 - 哎呀! – 2011-01-14 03:31:05

+0

谢谢约翰;确实原来是一个错字。 – 2011-01-14 03:33:07

回答

55

#include "/dev/stdin"是诀窍。

充其量只是一个愚蠢的面试问题。

+27

Wooooow。那是...邪恶。 – detly 2011-01-14 03:32:01

0

您需要告诉编译器从标准输入中获取它的源代码输入,然后编译它。这很可能是一个命令行参数。

这样,您可以将另一个程序的输出传送到您的编译器。

编辑像往常一样,堆栈溢出already had an answer for this.

echo "int main() { return 0; }" | gcc -x c - 

编辑错过了在编译声明。尽管如此,管道技巧仍然有效,所以我会把它留在那里。

+0

谢谢,但这不是我所要求的。 – 2011-01-14 03:34:39

3

本着独一无二的精神,我试图做出一个更独立于平台/环境的版本。然而,我被困在这里...所以这是我的问题,我可以取代'???'用?

#ifdef _WIN32 
#include ??? 
#else 
#include "/dev/stdin" 
#endif 

编辑:感谢ohmantics我现在可以得到这份工作:

#ifdef _WIN32 
#include "CON" 
#else 
#include "/dev/stdin" 
#endif