주 NULL 포인터 기능을 인수의 결과로서의 위반 Misra 규칙 11.3
문제
저는 정의 NULL_PTR
로 0U
다음 함수를 호출 이 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 이 아닌 포인터이다.