Я избегаю вырезать и вставлять, как чума. Это даже хуже, чем его кузен клонировать и модифицировать. Если вы столкнулись с такой ситуацией, как я, я всегда готов использовать макропроцессор или другой скрипт для генерации различных вариантов. По моему опыту, единственная точка истины чрезвычайно важна.
К сожалению, макропроцессор C не очень хорош для этой цели из-за раздражающих требований цитирования для новых строк, выражений, операторов и аргументов. Я ненавижу писать
#define RETPOS(E) do { if ((E) > 0) then return; } while(0)
но это цитирование является необходимостью. Я буду часто использовать препроцессор C, несмотря на его недостатки, потому что он не добавляет другой элемент в цепочку инструментов и поэтому не требует изменения процесса сборки или Makefiles.