Po delší době přináším další hádanku z oblasti programovacích jazyků C a C++. Tentokrát budeme řešit triviální věc nekonvenčním způsobem. Nic složitého to ale nebude a tak postačí dostatek důvtipu :).
Zadání
Vašim úkolem je napsat program v jazyce C nebo C++, který na standardní výstup vytiskne "Nazdar Karle!"
(bez uvozovek). Cožééé? V klidu, jen mě to nechte dopsat... Aby to nebylo tak triviální, tak se v programu nesmí vyskytovat žádný středník :). Mezi další podmínky patří to, že program musí vyhovovat normě C99 či C++98, nesmí se spoléhat na žádné implementačně závislé či nedefinované chování, a při překladu nesmí vyhazovat varování (ukázka překladu: gcc -std=c99 -W -Wall -pedantic -o nazdar nazdar.c
). Můžete použít cokoliv ze standardní knihovny (tj. #include <stdio.h>
neporušuje podmínku o středníku), ale nesmíte vytvářet vlastní hlavičkové soubory.
No a pokud se sejde víc řešení, tak vítězí ten, jehož program bude nejkratší (ve smyslu počtu užitých znaků ve zdrojovém kódu).
Řešení
Nejčistější a nejkratším mně známým řešením je následující program v C99 (viz komentář od afriho):
#include<stdio.h> int main(){if(puts("Nazdar Karle!")){}}
Jen poznamenám, že i v C99 je implicitní return 0;
při návratu z main()
(viz norma, 5.1.2.2.3.1).
Not so hard
No, to zas tak tezke nebylo...
main(){if(puts("Nazdar Karle!")){}}
popr.
main(){puts("Nazdar Karle!")X}
spolecne s gcc -DX=';', coz se pochopitelne s dalsimi -D da jeste zkratit na 'X' :)
Re: Not so hard
Díky za odpověď. Ono to ani nebylo myšleno jako něco složitého, ale spíše jako zajímavost :). Jen bych doplnil, že by tam měl být ještě #include <stdio.h> a explicitně zmíněn návratový typ mainu, jinak gcc hlásí varování.
Re: Not so hard
jasne, ja jsem jen liny psat :)
For what it's worth...
Neni to kratke, je to mirne obfuskovane, ale strednik tam neni.
Re: For what it's worth...
Hehe :). Díky za řešení.
Zveřejněno řešení #10
Zveřejnil jsem řešení desátého úkolu.