Насколько я знаю, самый короткий из возможных кваинов в C такой:
main(){char*a="main(){char*a=%c%s%c;printf(a,34,a,34);}";printf(a,34,a,34);}
Обратите внимание, что это недопустимый C ++, поскольку он использует неявное определение printf()
. Чтобы сделать его действительным C ++, вам нужно сделать следующее:
#include <stdio.h>
main(){char*a="#include <stdio.h>%cmain(){char*a=%c%s%c;printf(a,10,34,a,34);}";printf(a,10,34,a,34);}
Нет хитростей, включающих трюки - просто аккуратно создайте строку и напечатайте ее дважды, и используйте коды ASCII (10 и 34 вместо '\n'
и '"'
), чтобы избежать раздражения от необходимости избегать вещей.