#define A ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; #define B A A A A A A A A A A A A A A A A #define C B B B B B B B B B B B B B B B B #define D C C C C C C C C C C C C C C C C #define E D D D D D D D D D D D D D D D D #define F E E E E E E E E E E E E E E E E #define G F F F F F F F F F F F F F F F F #define H G G G G G G G G G G G G G G G G #define I H H H H H H H H H H H H H H H H #define J I I I I I I I I I I I I I I I I #define K J J J J J J J J J J J J J J J J #define L K K K K K K K K K K K K K K K K #define M L L L L L L L L L L L L L L L L #define O M M M M M M M M M M M M M M M M #define P O O O O O O O O O O O O O O O O #define Q P P P P P P P P P P P P P P P P Q
Как вы думаете, текст какого размера порождает эта простенькая препроцессорная программа?
Посчитать нетрудно, но если не вдаваться в подробности — лучше не пытаться запускать компиляцию такого файла дома, потому что это способно исчерпать всю доступную память, что чревато ухудшением отзывчивости, вплоть до полной неработоспособности. Этот набор макросов может служить примером того, что алгоритмическая неполнота исходного языка сама по себе ещё не является гарантией практической завершимости программы и ограничения на использование памяти. Системы, имеющие подобные неограниченные языки макросов опасны уже на этом уровне.
Комментариев нет:
Отправить комментарий