가능한 경우 함수의 반환 값의 형변환이 전달 된 매개 변수 중 하나에 해당하는 방식에 따라 컴파일러 경고를 생성하는 방법을 알고 싶습니다. 필자의 예에서는 함수 호출이 "Bytes"매개 변수에 의해 정의 된 것보다 적은 형식으로 형변환 된 경우 컴파일러 경고를 생성하려고합니다.사용자 정의 함수 형 변환에서 컴파일러 경고 생성
INT64U GetINTU(INT8U* Address, INT8U Bytes)
{
INT64U Value = 0;
if(Bytes<=8)
{
do
{
Value += ((INT64U)(*Address++))<<(--Bytes<<3);
}while(Bytes);
}
return Value;
}
EDIT :
여기(INT16U)GetINTU(VarPtr, 2); // This is ok
(INT16U)GetINTU(VarPtr, 4); // generates warning
(INT32U)GetINTU(VarPtr, 4); // This is ok
(INT32U)GetINTU(VarPtr, 8); // generates warning
(INT64U)GetINTU(VarPtr, 4); // This is ok
는 상기 함수이다 : 또한 널 포인터를 리턴 간주하지만, 이는 예를 들어 MSP430
위한 IAR을 이용한 C 프로그램에서 사용 정적 변수가 필요하다는 뜻입니다. 내가하고 싶지 않은 것
컴파일 타임에 오류가 발생합니다. 캐스트와 "Bytes"의 값을 비교하기를 원합니다. "Bytes"는 항상 하드 코딩 된 숫자로 전달됩니다. 1, 2, 4, 8이고 변수가 될 수 없습니다. 이것이 제가 할 수있는 방법이있을 것이라고 생각한 이유입니다. – Jeremy
@Jeremy C++에서는 템플릿을 사용할 수 있습니다. 아아, 평범한 C가 아니라 매크로를 사용하지 않습니다. –