В стандарте должны быть описаны метрики, по которым производится сравнение. Скажем, количество глобальных переменных в процентном соотношении от общего количества всех переменных, с учётом специфики производства встроенного ПО.
В смысле все метрики легко обходятся индусами абсолютно без повышения качества. Те же глобальные переменные превратятся в одну:
struct global_t
{
int n_23;
char c_a;
.... 100500 полей ...
} global;
P.S. Причем конкретно вот такой пример я видел неоднократно в сишных проектах. Авторы, видимо, где-то слышали о вреде глобальных переменных... но сути не поняли.
В мире сугубо встроенных систем это было когда-то не злом, а - суровой необходимостью.
Так неким образом боролись с желанием компилятора распихать статически объявленные переменные по ему угодным адресам.
Относительно Недолго.
Где-то между поздним кайнозоем и раннем антропогеном.
От индусского кода именно и отличалось осмысленным вступанием на территорию Абсолютного Зла.
Хотя, как это часто бывает в играх с Нехорошим, контроль над сложностью и осмысленной поддержкой срывался в самом неожиданном месте.
У меня сейчас на поддержке проект на Дельфи, в котором автор не продумал дерево наследования. Вложенные во владельцев объекты обращаются к полям владельцев через указатели на поля (которые инициализируются при создании вложенных объектов). Сейчас приступил к перепроектированию дерева и перетасованию функциональностей по уровням наследования, выделению общих частей, перепродумыванию интерфейсных частей. Ухожу от зацикливания в импорте модулей потихоньку.
Кроме того, есть два огромных куска подсистемы (просто оси графиков и общая горизонтальная ось времени для всех графиков), абсолютно дублирующих функциональность друг друга (различаясь именами полей, но, с практически одинаковыми методами, по смыслу, например в осях параметров тики, метки значений и сетки имеют Y координаты, а на оси времени - по X). Ну, и т.д.... Конец года и другие проекты подпирают, а тут ещё с этим разгребаться.......