08.10.2012 15:33, Dmitrii Kashin пишет:
> --------------- trick.c ---------------
>  1    
>  2    #include <stdio.h>
>  3    
>  4    struct base
>  5    {
>  6      int count;
>  7      int str[0];
>  8    };
>  9    
> 10    int main(int argc, char** argv)
> 11    {
> 12      int c;
> 13      printf("Input length> ");
> 14      scanf("%d",&c);
> 15      
> 16      union 
> 17      {
> 18        struct base body;
> 19        int str[sizeof(struct base)+c];
> 20      } object;
> 21      
> 22      object.body.count = c;
> 23    
> 24      for (int i=0; i<object.body.count; i++)
> 25        {
> 26          object.body.str[i] = c - i;
> 27        }
> 28    
> 29      for (int i=0; i<object.body.count; i++)
> 30        {
> 31          printf("object.body.str[%d] = %d\n",i,object.body.str[i]);
> 32        }
> 33      
> 34      printf("sizeof(struct base) = %d\n",(int)sizeof(struct base));
> 35      printf("sizeof(int) = %d\n",(int)sizeof(int));
> 36    
> 37      return 0;
> 38    }
> 39    
> ---------------------------------------
> 
> Компиляция и работа:
> 
> ---------------------------------------
> % c99 trick.c -o trick
> % ./trick 
> Input length> 3
> object.body.str[0] = 3
> object.body.str[1] = 2
> object.body.str[2] = 1
> sizeof(struct base) = 4
> sizeof(int) = 4
> %
> --------------------------------------- 
> 
> Замечу, что в книге Кернигана и Ритчи "Язык программирования Си"
> подобных фишек не описывалось. Виктор, Вы не подскажете, где можно
> почитать о подобных трюках?
В зависимости от того, где вы хотите применять трюки:
http://govnokod.ru/
http://underhanded.xcott.com/
http://ru.wikipedia.org/wiki/International_Obfuscated_C_Code_Contest

А также неплохо почитать про "принцип наименьшей неожиданности".


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/50731910.3090...@yandex.ru

Ответить