Мне было интересно, как стандартные показатели сложности кода (например, LOC, McCabe cyclomatic complex, Halstead metrics и т. Д.) Вычисляются перед ifdefs в коде C/C++.Метрики сложности кода и ifdefs
Если ifdefs игнорируются, синтаксические ошибки (или даже ошибки типа) могут возникнуть, например, в:
- #ifdef FOO
- для (I = 0; я < х; я ++) {
- #else
- для (I = 0; я < у; я ++) {
- #endif
- Е (...)
- }
Если линии 1, 3 и 5, игнорируются, результирующий код будет иметь одну петлю внутри другого, и отсутствующий «}» (таким образом ошибку синтаксиса).
Если учитываются #ifdefs, тогда для каждого варианта потребуется одна результирующая мера (в этом случае одна, когда FOO определена, а другая - для случая, когда FOO не определена). Однако такой подход может легко взорваться на практике.
Глядя на http://manpages.ubuntu.com/manpages/natty/man1/pmccabe.1.html, справочная страница сообщает, что:
Синтаксический pmccabe игнорирует все директивы CPP препроцессора - вычисления сложности появления кода, а не сложности после препроцессора искалечил код. Это особенно важно , поскольку простые вещи, такие как getchar (3), расширяются в макросы, которые увеличивают сложность сложности .
Но, как я уже сказал, такой подход может привести к появлению ошибок кода, что, в свою очередь, может помешать процессу вычисления или привести к некорректному значению.
Как инструменты преодолевают эту проблему (если они вообще преодолеваются)?
С уважением.
Для первой части: как измерить метрики сложности в существующем коде C/C++? Мы говорим о миллионах строк кода, поэтому переписывание не является возможным. Вторая часть: она взрывается, учитывая базу кода со сто макропеременных (2^n, где n обозначает такие макросы) – leco
@LeonardoPassos: зависит. Для чего вам нужны данные о сложности? –