2011-01-14 8 views
17

可能性の重複:
How to write program during compiling?奇数C面接の質問

こんにちはみんな。私は面接の質問がいっぱいのサイトでこの問題を発見し、それに困惑しました。コンパイル中に標準入力から読み込むことを可能にするプリプロセッサディレクティブがありますか?

コンパイル中に入力端末から別のプログラムを取り出し、実行時に2番目のプログラムの結果を返す小さなCプログラムを作成します。 (注:キーは、UNIXと思う)。

$ cc -o 1 1.c 
int main() { printf("Hello World\n"); } ^D 
$ ./1 
Hello World 

EDITをコンパイルしながら、この質問は正確な複製で判明し、プログラムを次に1.Cである、と仮定します。 How to write program during compiling?

+0

私はより良い私はあなたが意味を考えるものと一致するようにサンプルのシェルコマンドを編集しました。私が間違っているなら - おっと! –

+0

ありがとうジョン;確かにオリジナルはオタクです。 –

答えて

55

#include "/dev/stdin"です。

最高で面白い面接の質問。

+27

Wooooow。それは...悪です。 – detly

+1

正解、不必要なコメント –

+16

「愚か」はそれを説明し始めません - それは尋問者が取り出され、一発撃ち出されるべきであるという愚かさの重症のものです。 –

0

標準入力からソースコードの入力を受け取り、コンパイルするようにコンパイラに指示する必要があります。そのためのコマンドライン引数はおそらくあります。

このようにして、別のプログラムの出力をコンパイラにパイプすることができます。文をコンパイルしながら、いつものように

EDIT、スタックオーバーフローalready had an answer for this.

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

EDITを逃しました。配管のトリックはまだそれ以外の場合でも動作しますので、私はそこに残しておきます。

+0

ありがとうございますが、これは私が求めていたものではありません。 –

3

ワンアップマンシップの精神で、よりプラットフォーム/環境に依存しないバージョンを作成しようとしました。しかし、私はここにこだわっている...これは私の質問です、私は '???'と?

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

EDITohmanticsのおかげで、私は今で仕事を得ることができます。

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

'#include" CON "'がそのトリックです。 – ohmantics

+0

@ohmanticsだからそれは:)ありがとう! – William

+3

''のようなものがあったら、Internet ExplorerがあなたのコンピュータをBSODする日を思い出します。 – zneak