main(a){printf(a="main(a){printf(a=%c%s%c,34,a,34);}",34,a,34);}
Как это самовоспроизводится после компиляции? Какова роль написания 34 в функции printf?Программа самовоспроизводства
main(a){printf(a="main(a){printf(a=%c%s%c,34,a,34);}",34,a,34);}
Как это самовоспроизводится после компиляции? Какова роль написания 34 в функции printf?Программа самовоспроизводства
34 является кодом ASCII символов для двойной кавычки (") характера.
Чтобы следить за мою тангенциальную комментарий (это ссылка на Хофштадтер„Гёделя Escher Бах“), это работает потому что это quine, который в основном представляет собой рецепт, содержащий два элемента: ядро данных и операцию на этом ядре, так что когда операция завершена, воспроизводится оригинальный рецепт. Для этого ядро и операция почти идентичны . В программе, которую вы упомянули, ядром является строка
"main(a){printf(a=%c%s%c,34,a,34);}"
и операция остальная часть программы:
main(a){printf(a=_____,34,a,34);}
где ____
является ядро. Вы заметите, что они выглядят по существу тем же: операция может печатать сама, используя ядро в качестве спецификатора формата (который печатает ядро, но без кавычек, таким образом преобразуя ядро в операцию на выходе), а также загружая ядро как параметр в спецификаторе формата (%s
) и цитирование его, в результате чего ядро выводится.
операция (указанное ядро) => некатегоризованное ядро, которое включает в себя копию ядра, указанную => которая является исходной программой.
еще один момент: почему он использует этот 34 бизнеса является то, что он держит квотирование операции легко с помощью ядра без кавычек; если вы пытались использовать
"main(a){printf(a=\"%s\",a);}"
как ядро, с некотируемого ядром
main(a){printf(a="%s",a);}
было бы гораздо сложнее, потому что для того, чтобы процитировать ядро, вы должны были бы обратной косой черты побег кавычки в середине строки.
Oh !! thanx, но как он работает? –
@Arya: на этой странице есть достойное объяснение того, как можно построить «quines»: http://www.madore.org/~david/computers/quine.html Это может дать вам представление о том, как это работает. –
thanx для этой страницы html ... :) –
(касательный: «когда выдается ложь», когда выдается ложная ложь) –
Оффтопик: Сейчас что-то интересное. Благодаря! – ArjunShankar
извините за downvoting, но я думаю, что 34 очевидно, не так ли? – prongs