奇怪的C面试问题

时间:2011-01-14 03:24:29

标签: c

  

可能重复:
  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?

3 个答案:

答案 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 -

编辑在编译语句时错过了。然而,管道技巧仍然有效,所以我会留在那里。