Правило 8.4 касается несовместимости типов объектов с внешней связью. Существует возможная серьезная ошибка, которую правило призвано предотвратить: объявить объект одним типом в одном файле, а затем определить его как другой тип в другом файле.
Для предотвращения таких ошибок MISRA требует, чтобы предыдущий extern
объявление объекта является видимым для файла, который содержит определение.
Так что, если вы хотите, чтобы some_struct hi
было определено в области видимости файла, вы должны добавить объявление где-то тоже, предпочтительно в заголовочном файле :
extern some_struct hi;
static
решает проблему, потому что тогда у вас больше нет внешней связи, и тогда правило не применяется.
Обратите внимание, что (неконстантно) extern
spaghetti Глобалы крайне не рекомендуется в любой форме программы, MISRA или без MISRA. В подавляющем большинстве возможных случаев наличие таких глобальных переменных в программе вызвано неправильным дизайном программы.