주 NULL 포인터 기능을 인수의 결과로서의 위반 Misra 규칙 11.3

StackOverflow https://stackoverflow.com/questions/5458678

  •  12-11-2019
  •  | 
  •  

문제

저는 정의 NULL_PTR0U

다음 함수를 호출 이 NULL_PTR 이 사용되고 있습니다.

read_some_data(2U, (uint8_t *const) NULL_PTR, (uint8_t *const) NULL_PTR);

라는 함수 프로토 타입

int16_t read_some_data(const uint8_t id,   uint8_t *const data_1, uint8_t *const data_2);

에 컴파일,Misra 제기하는 원칙 11.3 위반 오류가 있습니다.(캐스트를 수행하지 않아도 됩니다 사이의 포인터 타입과 통합된 형식입니다.)

하지만 난 그냥 통과하는 NULL_PTR 다음과 같다,아니합니다.

read_some_data(2U, NULL_PTR, NULL_PTR);

는 더 나은 방법을 할까?을 억제하 Misra11.3 규칙 또는 그냥 통과하는 NULL_PTR 지 않고 캐스팅?

도움이 되었습니까?

해결책 3

iar 내부 구성 파일 yvals.h를 사용하지 않으려면 내 머리글 파일에서 Null_ptr을 사용했습니다.그러나 다른 이유로 나중에 yvals.h를 사용해야 할 수도 있으므로 문제가되지 않습니다.

null 또는 null_ptr을 사용하는지 여부는 일반적인 합의가 주조없이 null을 전달하는 것으로 가정합니다.내 기능은이를 수락하는 데 문제가 없습니다.이렇게하면, 나는 잘못된 11.3 규칙을 억제하지 않아도됩니다.

나는 올바른 방향으로 진행하고 있기를 바랍니다.

다른 팁

표준 'null'에 문제가 있습니까?

왜 캐스팅을 피할 수 있습니까?캐스팅은 항상 코드를 조금 더 더럽고 힌트가 수행되었으며 해킹이 수행 된 것이 있습니다.

그래서 나는 주조없이 null_ptr을 전달할 것입니다. 기능 사양을 확인한 후 null_ptr을 두 번째 매개 변수로 수락 할 수 있습니다 !!!

에 컴파일,Misra 제기하는 원칙 11.3 위반 오류가 있습니다.

그냥 현학적,MISRA 을 제기하지 않았 위반 오류를 귀하의 컴파일러를 제기 MISRA 규칙 위반 오류가 있습니다.

에서 당신은 무엇을 게시,나는 확신하지 보고된 위반이 올바른...

다른 한편으로,개인적으로 난 정의 NULL_PTR(void *)0u 기 때문에(엄격하게 말하기)0 이 아닌 포인터이다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top