определение consts в классе при соблюдении misra с местоположением определения

#c #class #scope #constexpr #misra

#c #класс #область видимости #constexpr #мисра #misra

Вопрос:

Вообще говоря, я бы определил кучу переменных, используя constexpr в файле заголовка класса. Это работает функционально. В соответствии с MISRA, когда этот заголовок класса используется более чем в одном файле, это нарушает правило 3-2-2 / 3-2-4, которое требует, чтобы переменная определялась только один раз (это C 14, который, судя по тому, что я нашел, нельзя сделать встроенным, если я не сделаю его функцией).

Как я могу обойти это? Если я перемещу их в файл cpp за пределами класса, то они будут иметь глобальную область видимости, а MISRA не допускает глобальную область видимости, поэтому пространство имен должно быть создано только для переменных. Я пробовал способы использования const , но это не сработало, или, может быть, я делал это неправильно.

Есть ли что-то, о чем думали разработчики MISRA, что мне не хватает? Очевидно, что лучше иметь переменную в словах с описанием, а затем некоторое случайное число в коде .. так что должен быть какой-то способ заставить это работать правильно? Или все просто игнорируют это нарушение в этом контексте?

Комментарии:

1. C 17 решил проблему такого типа, указав, что constexpr переменные также могут быть созданы inline . Поскольку это было ратифицировано после MISRA C 2016 (последняя версия MISRA C на момент написания этой статьи), это говорит о том, что MISRA по существу указала что-то недостижимое, пока сам C не был изменен для его поддержки.

2. Спасибо. Вы правы. Я провел еще несколько поисков и нашел это: misra.org.uk/forum/viewtopic.php?f=188amp;t=1757

Ответ №1:

Намерение MISRA состояло в том, чтобы это правило не применялось к константам. Согласно их форуму @ https://misra.org.uk/forum/viewtopic.php?f=188amp;t=1757

«Это правило не предназначалось для применения к константам и будет уточнено для следующей версии»