Or for a clean compile with gcc -std=c99 -pedantic -Wall :-
#include <stdio.h>
int *string = (int *)"on8gi$kjg-(kojn$pkjntWnm&r*&~ep!wPer{5vcvw0^obnq";
void hello(int idx)
{
putchar(string[idx] – idx);
if (string[++idx] != 0) hello(idx);
}
int main(void)
{
hello(1);
return 0;
}
Nice bit of dodgy pointer conversion from char * to int * in there 🙂
[EDIT]
Actually I'm surprised the obfuscated version didn't take the chance to use one of C's strangest features:-
value = array[index];
…can legally be replaced with…
value = index[array];
…yielding exactly the same result. 😯