2013-01-19 8 views
1

내가 (최소한 문제를 보여주기 위해 감소) 다음 줄이 :초기화 문자 배열과 MISRA 오류

Error[Pm023]: missing elements - braces shall be used to indicate and match the structure in the non-zero initialization of arrays and structures (MISRA C 2004 rule 9.2). 

왜이 오류가 :

char version_text[64U] = {'\0'}; 

이 줄은 다음과 MISRA 오류가 발생을?

나의 현재 해결 방법은 다음과 같습니다 char 유형 내 컴파일러 (IAR EW)에 의해 signed char로 구현되어 있음을 나타냅니다

char version_text[64U] = {0}; 

.

'\ 0'은 문자 리터럴이므로 char과 일치해야합니다.

답변

1

C에서 정수 문자 상수는 int이 아니라 char이 아닙니다. 그래서

char version_text[64U] = { '\0' }; 

char version_text[64U] = { 0 }; 

완전히 동등하다 (그리고 그 char의 부호의 독립적이다). 둘 다 int 상수를 유일한 초기화 자로 제공합니다.

MISRA 검사기가 첫 번째에 대해 불평하지만 두 번째가 아니라는 것은 불일치라는 것입니다.

그러나 정수형 문자 상수를 사용하는 것은 일반적으로 0이 아닌 초기화에 대해서만 수행되는 반면 MISRA는 모든 요소에 대해 초기화 프로그램을 필요로하며, 만약 내가 정확하게 메시지를 해석하고 검사기는 문자 상수를 들여다 보지 않는다. 만 {0}{NULL}는 MISRA를 준수 이에 따라

"Note also that all the elements of arrays or structures can be initialised (to zero or NULL) by giving an explicit initialiser for the first element only. If this method of initialisation is chosen then the first element should be initialised to zero (or NULL), and nested braces need not be used."

와 { '\ 0'}하지 (컴파일러가 같은 방식으로 취급하더라도) :

1

규칙은 말한다 .

+0

이 경우 또는 준수하는'' "'. – Lundin

0

는 다음에 시도 :

char version_text[64U] = { '\0', }; 

이 본질적 NULL뿐만 아니라 첫 번째로, 각 배열 요소를 초기화한다. 쉼표를 주목하십시오!