Путаница возникает из-за множества уровней абстракции, смешанных вместе в концепции «указатель». Программистов не смущают обычные ссылки в Java / Python, но указатели отличаются тем, что они раскрывают характеристики базовой архитектуры памяти.
Хорошим принципом является четкое разделение слоев абстракции, а указатели этого не делают.
Ну, вы можете запустить детектор клонов на вашем источнике кодовую базу каждую ночь.
Многие детекторы клонов работают, сравнивая исходные строки, и может найти только точный дублированный код.
CCFinder, выше, работает путем сравнения языков токены, поэтому он не чувствителен к пустому пространству изменения. Он может обнаруживать клоны, которые являются вариантами исходного кода, если есть только один токен изменения (например, изменить переменную X на Y в клон).
В идеале то, что вы хотите, это то, что указано выше, но способность найти клонов где вариации могут быть относительно произвольными, например, заменить переменную выражением, оператором блоком и т. д.
Наш детектор клонов CloneDR делает это для Java, C #, C ++, COBOL, VB.net, VB6, Fortran и других других языков. Его можно увидеть по адресу: http://www.semdesigns.com/Products/Clone/index.html
Помимо поддержки нескольких языков, механизм CloneDR может обрабатывать различные стили кодирования ввода, включая ASCII, ISO -8859-1, UTF8, UTF16, EBCDIC, ряд кодировок Microsoft и (японский) Shift-JIS.
На сайте есть несколько отчетов с примерами запуска обнаружения клонов, в том числе для C ++.
ИЗМЕНИТЬ Февраль 2014 г .: Теперь обрабатывает весь C ++ 14.
Same (http://sourceforge.net/projects/same/) is extremely plain, but it works on text lines instead of tokens, which is useful if you're using a language that isn't supported by one of the fancier clone finders.
Существует также Simian , который поддерживает Java, C #, C ++, C, Objective-C, JavaScript ...
Он поддерживается Hudson ] (например, CPD).
Если вы не являетесь проектом с открытым исходным кодом, вы должны заплатить за Simian.