MISRA 2004 правило 5.1 гласит что все идентификаторы должны иметь уникальные первые 31 символ. В чем причина этого правила? Это техническое ограничение для некоторых компиляторов?
Почему первые 31 символ идентификатора должны быть уникальными?
Ответы (2)
Стандарты C гарантируют только то, что определенное количество начальных символов в идентификаторах является значимым. Для C99 это 31 символ для внешних идентификаторов. Даже это огромный шаг вперед по сравнению с ANSI/IS C, который гарантирует только 6 значащих символов для внешних идентификаторов… (Так что, если вам интересно, почему так много старых функций C имеют непроизносимые имена, это одна из причин.)
На практике компиляторы, как правило, поддерживают большее количество значащих символов в идентификаторах (и в стандарте C IIRC даже есть сноска, поощряющая это), но MISRA, вероятно, хотел выбрать «безопасный» предел, уже гарантированный самым последним на тот момент стандартом C. , C99, без наложения ограничения в 6, которое было бы гарантировано C90, за которым в противном случае следует MISRA 2004.
редактировать: поскольку в комментариях дважды задавался вопрос, позвольте мне пояснить: MISRA 2004 не следует стандарту C99, и нет веских доказательств того, что стандарт C99 способствовал установлению MISRA лимита в 31 символ. Однако ограничение не исходит из C90 (ISO C), поскольку C90 указывает ограничение в 6 символов. Таким образом, нужно либо признать, что MISRA просто независимо выбрала номер 31 без какой-либо известной причины, либо (на мой взгляд, более вероятно) последовала примеру C99 в этом конкретном решении.
MISRA-C:2004 следует стандарту C90, который требует, чтобы только 6 первых символов идентификатора рассматривались как отдельные. Вы можете прочитать обоснование в документе MISRA.
MISRA-C:2004 Правило 14:
Стандарт ISO требует, чтобы внешние идентификаторы различались по первым 6 символам. Однако соблюдение этого жесткого и бесполезного ограничения считается ненужным ограничением, поскольку большинство компиляторов/компоновщиков допускают значение не менее 31 символа (как для внутренних идентификаторов).
Упоминаемым стандартом ISO является ISO 9899:1990 (C90). Цель правила — убедиться, что вы используете нормальный, безопасный компилятор с достаточным количеством значимых символов.