Ответ 1
#include "/dev/stdin"
- это трюк.
Глупый вопрос интервью в лучшем случае.
Привет, ребята. Я нашел эту проблему на сайте, посвященном вопросам собеседования, и был в тупике. Есть ли какая-то препроцессорная директива, позволяющая читать со стандартного ввода во время компиляции?Возможный дубликат:
Как написать программу во время компиляции?
Напишите небольшую программу на C, которая при компиляции принимает другую программу из входного терминала, а при запуске дает результат для второй программы. (ПРИМЕЧАНИЕ: ключ, думаю, UNIX). Предположим, что программа равна 1.c. Затем, компилируя
$ cc -o 1 1.c
int main() { printf("Hello World\n"); } ^D
$ ./1
Hello World
EDIT Оказывается, этот вопрос является точным дубликатом. Как написать программу во время компиляции?
#include "/dev/stdin"
- это трюк.
Глупый вопрос интервью в лучшем случае.
В духе one-upmanship я попытался создать более независимую от платформы/среду версию. Тем не менее, я застрял здесь... так что это мой вопрос, что я могу заменить '???' с?
#ifdef _WIN32
#include ???
#else
#include "/dev/stdin"
#endif
EDIT: благодаря ohmantics Теперь я могу получить работу с помощью
#ifdef _WIN32
#include "CON"
#else
#include "/dev/stdin"
#endif
Вам нужно сказать компилятору, чтобы он ввел исходный код со стандартного ввода и скомпилировал его. Для этого есть, вероятно, аргумент командной строки.
Таким образом, вы можете передать вывод другой программы в ваш компилятор.
РЕДАКТИРОВАТЬ Как обычно, у Qaru уже был ответ на этот вопрос.
echo "int main() { return 0; }" | gcc -x c -
РЕДАКТИРОВАТЬ. Пропустил оператор компиляции while. Трюк трубопровода все еще работает иначе, поэтому я оставлю его там.