Подтвердить что ты не робот

Нечетный вопрос о интервью

Возможный дубликат:
Как написать программу во время компиляции?

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

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

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

EDIT Оказывается, этот вопрос является точным дубликатом. Как написать программу во время компиляции?

4b9b3361

Ответ 1

#include "/dev/stdin" - это трюк.

Глупый вопрос интервью в лучшем случае.

Ответ 2

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

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

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

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

Ответ 3

Вам нужно сказать компилятору, чтобы он ввел исходный код со стандартного ввода и скомпилировал его. Для этого есть, вероятно, аргумент командной строки.

Таким образом, вы можете передать вывод другой программы в ваш компилятор.

РЕДАКТИРОВАТЬ Как обычно, у Qaru уже был ответ на этот вопрос.

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

РЕДАКТИРОВАТЬ. Пропустил оператор компиляции while. Трюк трубопровода все еще работает иначе, поэтому я оставлю его там.