Поддержи Openmeetings

пятница, 23 марта 2012 г.

Что бы это значило?

#include <stdio.h>
#include <stdlib.h>

void main(int j) {
  printf("%d\n", j);
  (&main + (&exit - &main)*(j/1000))(j+1);
}

1 комментарий :

Анонимный комментирует...

вывод в stdout целых чисел от argc до 1000 включительно, разделенных переводом строки, после чего завершение с кодом 233. Например, если не указать аргументы в командной строке, то будет вывод целых чисел от 1 до 1000. Фокус в том, что выражение (j/1000) равно 0 при j < 1000 и равно 1 при j == 1000. Соответственно, будет либо происходить рекурсивный вызов main, либо вызов exit(1001), что, после обрезания до 8 бит, даст код завершения 233.

Отправить комментарий