2011-01-14 11 views
17

Powiel możliwe:
How to write program during compiling?Odd C wywiad pytanie

Hi guys. Znalazłem ten problem na stronie pełnej pytań do wywiadu i zostałem przez nią zaskoczony. Czy istnieje jakaś dyrektywa preprocesora, która pozwala na odczyt ze standardowego wejścia podczas kompilacji?

Napisz mały program C, który podczas kompilacji pobiera inny program z terminala wejściowego, a po uruchomieniu podaje wynik dla drugiego programu. (UWAGA: Klucz jest, pomyśl UNIX). Załóżmy, że program jest 1.C Następnie podczas kompilacji

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

EDIT Okazuje się to pytanie jest dokładną kopią. How to write program during compiling?

+0

edytowany poleceń próbka skorupa lepiej pasuje do tego, co myślę, że miał na myśli. Jeśli się mylę - oops! –

+0

Dzięki John; w rzeczy samej oryginał był literówką. –

Odpowiedz

55

#include "/dev/stdin" to podstęp.

Głupie pytanie w najlepszym wypadku.

+27

Wooooow. To jest ... zło. – detly

+1

Prawidłowa odpowiedź, niepotrzebny komentarz: –

+16

"Głupek" nie zaczyna go opisywać - jest to powaga idiotyzmu, że osoba pytająca powinna zostać wyrwana i krótko ostrzelana. –

0

Musisz poinformować kompilator, aby podjął jego kod źródłowy ze standardowego wejścia i skompiluj go. Prawdopodobnie istnieje argument dotyczący wiersza poleceń.

W ten sposób można potokować wyjście innego programu do kompilatora.

EDIT Jak zwykle, przepełnienie stosu already had an answer for this.

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

EDIT Nieodebrane podczas kompilacji oświadczenie. Sztuczka orurowania wciąż działa inaczej, więc zostawię ją tam.

+0

Dzięki, ale nie o to prosiłem. –

3

W duchu upiększania starałem się stworzyć wersję bardziej niezależną od platformy/środowiska. Jednak utknąłem tutaj ... więc to jest moje pytanie, co mogę zastąpić "???" z?

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

EDIT: Dzięki ohmantics mogę teraz dostać pracę z:

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

'#include" CON "' jest lewą. – ohmantics

+0

@ohmantics Więc to jest :) dzięki! – William

+3

Pamiętam dni, w których program Internet Explorer wykonał BSOD na twoim komputerze, jeśli napotkał coś podobnego do ''. – zneak