Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Это правило актуально только для С. Идентификаторы с внешним типом связывания должны быть различимы в пределах ограничений, накладываемых используемым стандартом.
Ограничения:
Рассмотрим первый пример:
// 123456789012345678901234567890123 extern int shrtfn(void); // OK extern int longfuncname(void); // Error in С90, // but ОК in С99 extern int longlonglonglonglongfunctionname1(void); // Error in both
Длинные идентификаторы затрудняют чтение кода, а также могут быть перепутаны с автоматически сгенерированными. Также, в случае если два идентификатора различаются только в незначащих символах, то поведение не определено.
На практике некоторые имплементации (компиляторов и компоновщиков) могут иметь собственные ограничения. Для их уточнения стоит обратиться к документации.
Рассмотрим второй пример:
// 123456789012345678901234567890123 extern int longFuncName1(int); extern int longFuncName2(int); extern int AAA; extern int aaa; void foo(void) { longFuncName2(AAA); }
В данном коде присутствует сразу несколько ошибок (рассмотрим на примере стандарта C90):
Данная диагностика классифицируется как:
|