Mój przyjaciel mówi, że można napisać program w języku C, który wydrukuje "Witaj świecie" bez IF/WHILE/FOR
i bez średników. Po minimalnych badaniach powiedziałem jej, że nie jest to możliwe. Czy to możliwe?Witaj, świecie w C bez średników i bez IF/WHILE/FOR oświadczenia
Odpowiedz
Próbowałam znaleźć "przenośny" sposób kradzież średnika z pliku włączającego. To działa pod Linuksem:
int main(int ac, char **av)
{
#define typedef
#define uint8_t a[printf("hello world\n")]
#include <stdint.h>
}
Powoduje to jeden typedef unsigned char uint8_t
stać mój printf.
Kolejną sztuczką, która zadziałała, było #define
od każdego standardowego typu stdint, dzięki czemu stdint.h
ogranicza się do garści średników.
Oba te elementy leżą płasko na FreeBSD, ponieważ używają prywatnych pośrednich typów (takich jak __uint8_t
), co oznacza, że usunięcie typedef kończy się niepowodzeniem w cytowanym przykładzie i uniemożliwia mi pomyślne usunięcie wszystkich nie-średników w drugim przypadku.
Wygląda na to, że powinno być możliwe wykradanie czystego średnika z pliku włączającego. Czy ktoś może poprawić swoją próbę?
+1 za bardzo wyjątkowe podejście ... Podoba mi się. – cdhowie
Nie działa w systemie Windows (kompilator Microsoft C wersja 17) – ZhekaKozlov
#include
#include <stdio.h>
int main() {
switch (printf("Hello, world!\n")) {}
}
Jeśli twój przyjaciel mówi: „Och, nie można używać albo przełączyć”, a następnie:
#include <stdio.h>
int main(int argc, char *argv[printf("Hello, world!\n")]) {}
Jestem rozdarty, czy się sugerować tym, ponieważ to zależy od dokładnego brzmienia pytanie, ale:
#error hello world
(jeśli nic innego, być może będzie to zażegnać Followup „jak można wydrukować cześć świat bez main
” ...)
Proszę nie bądź tak trudny dla siebie. –
Głównym problemem związanym z tą techniką jest to, że w rzeczywistości nie tworzy ona żadnego działającego programu. Jednak z pewnością jest to sprytne. A sprytne rozwiązanie nigdy nie jest złym rozwiązaniem. – cdhowie
@cdh, ale chcesz powiedzieć "nadal jestem królem" –
Można też obejść ograniczenia jak
#define X i##f
#define Y whi##le
#define Z f##or
#define W swi##tch
Co o:
#include <stdio.h>
int main(void *HAHA[printf("Hello world!\n")]) {}
C nie jest fajne :)
czy możesz wyjaśnić, co to jest wstawić wywołanie funkcji w innym bloku deklaracji parametrów funkcji? Nie mogę tego zrozumieć. –
Naprawdę chciałbym wiedzieć ... :-) –
printf zwraca int (w tym przypadku przewidywalny), co oznacza, że pełna definicja funkcji jest int main (void * HAHA [12]) { } Aby dowiedzieć się, że magiczna liczba to 12, musisz najpierw wykonać instrukcję printf. – Clearer
Możliwe jest napisanie programu C, który wydrukuje "Witaj świecie" bez IF/WHILE/FOR i bez średników.
Łatwo. Zwróć uwagę, że w C rozróżniana jest wielkość liter.
int main()
{
if (printf("Hello, World\n")){}
}
if
to słowo kluczowe w C, IF
nie jest.
Dlaczego głosowanie w dół? Podążyłem za listem, do samego przypadku pytania. Wydaje się nieco surowe, gdy samo pytanie jest jednym z tych bezużytecznych pytań "jak możemy legalnie nadużywać C". – JeremyP
@JeremyP Nie głosowałem w inny sposób, ale nikt nie lubi adwokata od zasad. –
@Dan Neely: Co to jest prawnik zasad? Bądźmy szczerzy, pierwotne pytanie nie jest tak naprawdę poważnym pytaniem programistycznym, dlaczego więc ludzie poważnie traktują język w odpowiedzi na policzek i głosują na niego? – JeremyP
można użyć instrukcji switch, aby uzyskać moc pożądania, tu jest kod poniżej
#include<stdio.h>
int main()
{
switch(printf("hello world"))
return 0;
}
nadzieję, że to pomoże Ci
- 1. Interesujący wywiad "Witaj świecie"
- 2. Wiązanie Crystal C, prosty przykład Witaj świecie.
- 3. Witaj na świecie dla CUDA.Net
- 4. Haskell Witaj świecie, zaćmienie IDE
- 5. gtkmm/C++ pierwszy przykład Witaj świecie wycieku pamięci
- 6. Prosty przykładowy klient TCPClient/Listner ("witaj świecie")
- 7. Witaj świecie - Flask/Apache/mod_wsgi - brak odpowiedzi z Apache
- 8. C++ - sens oświadczenia łączące typedef i TypeName
- 9. Dlaczego kompilator C++ nie narzeka, gdy używam funkcji bez nawiasów?
- 10. Android i SQLite: kiedy używać średników do wyciągów końcowych?
- 11. Klasa C# bez konstruktora
- 12. C# i FFmpeg najlepiej bez poleceń powłoki?
- 13. Witaj, nie używając bibliotek
- 14. C# Application.Run bez formularza
- 15. problem z uruchomieniem Witaj świecie z serwerem tornado (Python 2.5, Win 7)
- 16. Dlaczego granie w AWS DynamoDb "Witaj świecie" generuje alarmy odczytu/zapisu?
- 17. Android Witaj świecie w IntelliJ 12 - Nie można znaleźć android.app.Aktywność klasa
- 18. Orientacja obiektowa "Witaj świecie" za pomocą Windows Forms w języku F #
- 19. Czy można używać InternalVisibleTo bez silnego zestawu nazw w C#?
- 20. Różnica ograniczenia i BEZ DZIAŁANIA
- 21. Mnożenie liczby całkowitej bez podpisu i bez znaku
- 22. Konwersja między stacjami C++ std :: vector i C bez kopiowania
- 23. Uczenie się C++ bez IDE
- 24. Cel nauki C bez Maca
- 25. C# async, czekaj bez zadań
- 26. Kompilowanie C++ bez operatora usuwania
- 27. Kompilacja kodu C++ bez uwzględniania
- 28. Polecenie popen C++ bez konsoli
- 29. Maszynka do golenia - Renderuj bez Renderowania() i bez kodowania
- 30. Pętla bez porównania n razy w C
pokrewne: http://stackoverflow.com/questions/2754493/hello -world-in-c-with-no-semi-colons – kennytm
Dlaczego chcesz? Jeśli na klawiaturze brakuje średnika, masz głębsze problemy. –
Wygląda na to, że twój przyjaciel lubi te zakamuflowane zawody C i PERL? – winwaed