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를 사용할 때에 수많은 메시지에 휘둘리지 않으려면 본 제안을 적용하세요.

모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.