2011-01-14 3 views
17

Можно создать дубликат:
How to write program during compiling?Одд C вопрос интервью

Привет, ребята. Я нашел эту проблему на сайте, посвященном вопросам собеседования, и был в тупике. Существует ли какая-либо препроцессорная директива, позволяющая читать со стандартного ввода во время компиляции?

Запишите небольшую программу на C, которая при компиляции принимает еще одну программу от входного терминала, а при запуске дает результат для второй программы. (ПРИМЕЧАНИЕ: ключ, думаю, UNIX). Предположим, что программа 1.c Затем, при составлении

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

EDIT Оказывается, этот вопрос является точной копией. How to write program during compiling?

+0

Я редактировал ваш пример команды оболочки, чтобы лучше соответствовать тому, что я думаю, что вы имели в виду. Если я ошибаюсь - ох! –

+0

Thanks John; действительно, оригинал был опечаткой. –

ответ

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

В духе one-upmanship я попытался создать более независимую от платформы/среду версию. Тем не менее, я застрял здесь ... так что это мой вопрос, что я могу заменить '???' с?

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

EDIT: Благодаря ohmantics теперь я могу получить работу с:

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

'#include" CON - это трюк. – ohmantics

+0

@ohmantics Так это :) спасибо! – William

+3

Я помню дни, когда Internet Explorer будет BSOD на вашем компьютере, если он столкнулся с чем-то вроде ''. – zneak

Смежные вопросы