avva: (Default)
[personal profile] avva
Загадка: что напечатает приведенная ниже однострочная программа, если её запустить? Желательно отгадать, не запуская. Если никак не получится, советую хотя бы попробовать объяснить, почему она печатает то, что печатает. Кстати, компилировать и запускать надо на каком-нибудь Юниксе (почему? дополнительный вопрос).

main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}

Это одна из самых любимых мной программ из числа победителей Obfuscated C Contest. Она победила в категории one-liner в 87-м году. А ещё одна программа-победительница в том же году замечательно иллюстрирует тезис статьи Дейкстры "Goto statement considered harmful":
#include <stdio.h>
#include <malloc.h>
main(togo,toog)
int togo;
char *toog[];
{char *ogto,   tgoo[80];FILE  *ogot;  int    oogt=0, ootg,  otog=79,
ottg=1;if (    togo==  ottg)   goto   gogo;  goto    goog;  ggot:
if (   fgets(  tgoo,   otog,   ogot)) goto   gtgo;   goto   gott;
gtot:  exit(); ogtg: ++oogt;   goto   ogoo;  togg:   if (   ootg > 0)
goto   oggt;   goto    ggot;   ogog:  if (  !ogot)   goto   gogo;
goto   ggto;   gtto:   printf( "%d    goto   \'s\n", oogt); goto
gtot;  oggt:   if (   !memcmp( ogto, "goto", 4))     goto   otgg;
goto   gooo;   gogo:   exit(   ottg); tggo:  ootg=   strlen(tgoo);
goto   tgog;   oogo: --ootg;   goto   togg;  gooo: ++ogto;  goto
oogo;  gott:   fclose( ogot);  goto   gtto;  otgg:   ogto=  ogto +3;
goto   ogtg;   tgog:   ootg-=4;goto   togg;  gtgo:   ogto=  tgoo;
goto   tggo;   ogoo:   ootg-=3;goto   gooo;  goog:   ogot=  fopen(
toog[  ottg],  "r");   goto    ogog;  ggto:  ogto=   tgoo;  goto
ggot;}

Re:

Date: 2002-08-08 06:20 am (UTC)
From: [identity profile] avva.livejournal.com
Ты знал! Ты знал! ;)
Я пока скрою твой коммент, чтобы дать ещё другим возможность порешать.

Date: 2002-08-08 06:25 am (UTC)
From: [identity profile] hotgiraffe.livejournal.com
Кстати, очень забавные вещи происходят, когда пишешь коммент на коммент, а того в это время скринят.

А вопрос, собственно, был такой - говорит ли ANSI C, что charset - всегда ASCII (в младшей половине) ?
Ибо с EBCDIC, например, этот номер не пройдёт - константу править придёцца.

Re:

Date: 2002-08-08 06:29 am (UTC)
From: [identity profile] avva.livejournal.com
Не помню, говорит или нет.
Но никто не сказал, что она обязана быть 100% ANSI C compliant.

Date: 2002-08-08 07:30 am (UTC)
From: [identity profile] cema.livejournal.com
говорит ли ANSI C, что charset - всегда ASCII (в младшей половине) ?

Видимо, нет, хотя есть устойчивое мнение, что да. Подробности тут.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 28th, 2025 10:19 am
Powered by Dreamwidth Studios