MISRA C 2012 - Правило 21.1 - Макросы начинаются с подчеркивания - PullRequest
0 голосов
/ 05 июня 2018

Правило 21.1 в MISRA C 2012 гласит, что

# define и #undef не должны использоваться для зарезервированного идентификатора или зарезервированного имени макроса

ThisПравило применяется к идентификатору или макросу, начинающимся с подчеркивания

Обоснование :

Удаление или изменение значения зарезервированного макроса может привести к неопределенному поведению

Я не понимаю, почему имя макроса не должно начинаться с символа подчеркивания, даже если это не зарезервированный макрос?Например, в моих заголовочных файлах:

#ifndef __MY_HEADER_
#define __MY_HEADER_

или в библиотеке, которую я использую:

#define __I volatile const

Должен ли я изменить весь свой код и библиотеку, которую я использую (чтобольшая библиотека), чтобы соответствовать этому правилу или есть более простое решение?

1 Ответ

0 голосов
/ 05 июня 2018

Согласно стандарту C (раздел 7.1.3), все идентификаторы, начиная с _[A_Z] или __, зарезервированы.Поскольку они зарезервированы, здравый смысл и правило 21 запрещают вам изменять (переопределять или отменять) их (или создавать свои собственные).

Таким образом, вы должны изменить свой код на , а не , используя ведущиеподчеркивает даже в том числе защиту, не говоря уже о ваших макросах.

Дальнейшее прочтение можно найти, например, здесь: Включить в C

условные обозначения.
...