MISRA 검사에서 헤더 파일 제외하기
기술노트 24725
아키텍처:
All
컴포넌트:
compiler
업데이트:
2021-05-07 오전 3:51
소개
본 기술 노트 내장 MISRA checkers(Embedded Workbench 툴 체인에 포함된)에 대해 설명합니다.
C-STAT 사용자에게 알림 : C-STAT MISRA checkers를 사용하고 계시다면 C-STAT 문서를 참고하세요.
논의
내장 MISRA checkers 중 하나를 활성화하면, 수많은 메시지가 생성될 수 있습니다. 대부분의 메시지들이 헤더 파일의 내용과 관련이 있기 때문이고, C 소스와 관련한 메시지는 눈에 띄지 않을 수 있습니다.
일부 유형의 헤더 파일에 대해 MISRA checks를 비활성화 하는 것이 도움이 될 수 있습니다. 그러한 헤더 파일은 다음과 같습니다:
- IAR Systems 헤더 파일 (자동으로 제외).
- 파일 내용을 변경할 수 없는 타사(Third-party) 헤더 파일.
- 내용을 변경하지 않을 본인의 헤더 파일.
이러한 헤더 파일을 위해 '주 해결책' 또는 '대체 해결책'을 적용하세요.
주 해결책
#pragma diag_suppress=tag[,tag,...]
지시어는 내장 MISRA C checker 메시지를 억제하는데 사용됩니다.
모든 #include
지시어 마다 긴 리스트의 MISRA C 태그를 작성하는 것을 피하려면, 다음 두 가지 매크로를 사용하세요:
#define MISRAC_DISABLE _Pragma ("diag_suppress= \
Pm001,Pm002,Pm003,Pm004,Pm005,Pm006,Pm007,Pm008,Pm009,Pm010,Pm011,\
Pm012,Pm013,Pm014,Pm015,Pm016,Pm017,Pm018,Pm019,Pm020,Pm021,Pm022,\
Pm023,Pm024,Pm025,Pm026,Pm027,Pm028,Pm029,Pm030,Pm031,Pm032,Pm033,\
Pm034,Pm035,Pm036,Pm037,Pm038,Pm039,Pm040,Pm041,Pm042,Pm043,Pm044,\
Pm045,Pm046,Pm047,Pm048,Pm049,Pm050,Pm051,Pm052,Pm053,Pm054,Pm055,\
Pm056,Pm057,Pm058,Pm059,Pm060,Pm061,Pm062,Pm063,Pm064,Pm065,Pm066,\
Pm067,Pm068,Pm069,Pm070,Pm071,Pm072,Pm073,Pm074,Pm075,Pm076,Pm077,\
Pm078,Pm079,Pm080,Pm081,Pm082,Pm083,Pm084,Pm085,Pm086,Pm087,Pm088,\
Pm089,Pm090,Pm091,Pm092,Pm093,Pm094,Pm095,Pm096,Pm097,Pm098,Pm099,\
Pm100,Pm101,Pm102,Pm103,Pm104,Pm105,Pm106,Pm107,Pm108,Pm109,Pm110,\
Pm111,Pm112,Pm113,Pm114,Pm115,Pm116,Pm117,Pm118,Pm119,Pm120,Pm121,\
Pm122,Pm123,Pm124,Pm125,Pm126,Pm127,Pm128,Pm129,Pm130,Pm131,Pm132,\
Pm133,Pm134,Pm135,Pm136,Pm137,Pm138,Pm139,Pm140,Pm141,Pm142,Pm143,\
Pm144,Pm145,Pm146,Pm147,Pm148,Pm149,Pm150,Pm151,Pm152,Pm153,Pm154,\
Pm155")
#define MISRAC_ENABLE _Pragma ("diag_default= \
Pm001,Pm002,Pm003,Pm004,Pm005,Pm006,Pm007,Pm008,Pm009,Pm010,Pm011,\
Pm012,Pm013,Pm014,Pm015,Pm016,Pm017,Pm018,Pm019,Pm020,Pm021,Pm022,\
Pm023,Pm024,Pm025,Pm026,Pm027,Pm028,Pm029,Pm030,Pm031,Pm032,Pm033,\
Pm034,Pm035,Pm036,Pm037,Pm038,Pm039,Pm040,Pm041,Pm042,Pm043,Pm044,\
Pm045,Pm046,Pm047,Pm048,Pm049,Pm050,Pm051,Pm052,Pm053,Pm054,Pm055,\
Pm056,Pm057,Pm058,Pm059,Pm060,Pm061,Pm062,Pm063,Pm064,Pm065,Pm066,\
Pm067,Pm068,Pm069,Pm070,Pm071,Pm072,Pm073,Pm074,Pm075,Pm076,Pm077,\
Pm078,Pm079,Pm080,Pm081,Pm082,Pm083,Pm084,Pm085,Pm086,Pm087,Pm088,\
Pm089,Pm090,Pm091,Pm092,Pm093,Pm094,Pm095,Pm096,Pm097,Pm098,Pm099,\
Pm100,Pm101,Pm102,Pm103,Pm104,Pm105,Pm106,Pm107,Pm108,Pm109,Pm110,\
Pm111,Pm112,Pm113,Pm114,Pm115,Pm116,Pm117,Pm118,Pm119,Pm120,Pm121,\
Pm122,Pm123,Pm124,Pm125,Pm126,Pm127,Pm128,Pm129,Pm130,Pm131,Pm132,\
Pm133,Pm134,Pm135,Pm136,Pm137,Pm138,Pm139,Pm140,Pm141,Pm142,Pm143,\
Pm144,Pm145,Pm146,Pm147,Pm148,Pm149,Pm150,Pm151,Pm152,Pm153,Pm154,\
Pm155")
헤더 파일에 대해 MISRA C 검사를 비활성화하려면 다음과 같이 작성하세요:
MISRAC_DISABLE
#include "myincludes.h"
MISRAC_ENABLE
대체 해결책
IAR 헤더 파일을 참고하여 영감과 제안을 얻을 수 있습니다. 이 헤더 파일은 MISRA C를 준수하기 위해 작성된 것이 아니라, 효율적으로 동작하도록 작성되었습니다.
IAR Systems 헤더 파일에 의도적으로 문서화하지 않은 #pragma
지시어가 사용됩니다.
#pragma system_include
MISRA C 오류를 생성하는 모든 헤더 파일에 조기에 추가할 수 있습니다.
결론
내장 (MISRAC-1998와 MISRAC-2004) checkers를 사용할 때에 수많은 메시지에 휘둘리지 않으려면 본 제안을 적용하세요.
모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.