Неважно, я понял:
1: макрос компилятора для v -> putchar
2: макрос компилятора для замены print (x) на:
-
main(){
putchar( 4 + putchar(putchar(52) - 4);
return 0;
}
/* comment garbage from line 3 */
4: вызывает print(202*2)
, но макрос 202*2
выбрасывается; просто вставьте сюда основной
5: переопределяет exit()
как ничто.
Окончательная предварительная обработка программы - это все, что определено в строке 2.
putchar возвращает значение, которое он напечатал, поэтому он сначала печатает ascii 52, который равен «4», затем он печатает «0», возвращая символ 0, который затем добавляется к 4 и, наконец, печатается из самого внешнего printchar ,
Очевидно, что конечный результат - 404, но я был разочарован тем, что большая часть кода является просто закомментированным мусором, а не фактическими интересными языковыми причудами. Единственная действительно интересная вещь, которую я предполагаю, состоит в том, что putchar
возвращает значение печатного символа, но даже тогда ...
Редактировать
Я действительно злюсь на себя за то, что не думаю, что это как python, perl, ruby или php: \