내가 매개 변수로 두 개의 번호를 수신 ANSI C에서 함수를 쓰고 있어요. 매개 변수는 int
또는 float
유형입니다. 번호는 내 필터에 따라 유효하거나 유효하지 않을 수 있습니다. 어떤 의미의 실패를 반환하는 방법은 무엇입니까? 반환 유형은 float
입니다. 내 마음에 가장 먼저 오는 것은 NaN
추상 유형이었습니다. 하지만
ANSI C로 그것을 표현하는 방법을 모른다 (내 나쁜 영어 죄송합니다. 영어가 모국어가 아닌)
내가 매개 변수로 두 개의 번호를 수신 ANSI C에서 함수를 쓰고 있어요. 매개 변수는 int
또는 float
유형입니다. 번호는 내 필터에 따라 유효하거나 유효하지 않을 수 있습니다. 어떤 의미의 실패를 반환하는 방법은 무엇입니까? 반환 유형은 float
입니다. 내 마음에 가장 먼저 오는 것은 NaN
추상 유형이었습니다. 하지만
ANSI C로 그것을 표현하는 방법을 모른다 (내 나쁜 영어 죄송합니다. 영어가 모국어가 아닌)
NaN은 "추상적 유형"이 아닙니다. 이것은 부동 소수점 데이텀의 값입니다.
"ANSI C"에 의해 당신이 (많은이 하나를 가지고로, 용어의 실제 의미이다) 표준 C를 의미하는 경우 <math.h>
와 유모를 생산하기 위해 NAN
매크로를 사용하고 isnan(x)
을 포함 하나를 감지 할 수 .
"ANSI C"는 오랫동안 대체 된 C89 표준 (일부 사람들이 의도적으로 올바르지 않더라도)을 의미하며, 0./0.
을 사용하여 NaN 값을 생성하고 x != x
으로 하나를 확인하십시오 .
문제 수에 따라 유효하지 않을 수 있습니다 내 "나는 어떤 값을 의미 실패를 반환 어떻게 다음 필터링
를 대신이 사용할 수 NaN의에 대한 번호를 비교하는?은 C에서 언급 한 바와 같이
if (x != x) // x is NaN
을 이 표현식 0.f/0.f
을 사용하여 C89에서 float
NaN 값을 생성 할 수 있습니다.
OP는 NaN을 확인하는 방법을 묻지 않았습니다. –
당신은 할 수 없어이
if(your_variable != your_variable)
{
return 0; //catch 0 as the failure returned value
}
else
{
//your code
}
-1이 답변에는 아무 것도 설명되어 있지 않기 때문에 NaN을 사용하는 방법에 대해 이미 알고있는 사람이 아니라면 즉시 혼란에 빠질 수있는 코드를 포함하고 있습니다. 또한 '0'은 완전히 합리적으로 반환 값이 될 수 있기 때문입니다. –
같은 것을 가지고, 두 개의 변수 값 하나, 실패 플래그를 반환해야합니다.
예를 들어 정상 작동시 함수가 사실을 반환하도록 설정할 수 있습니다. 오류 (NaN)의 경우 거짓입니다.
결과를 저장하는 변수는 참조로 매개 변수로 전달되고 성공한 경우 반환 값을 보유합니다.
BOOL myFunction(int inInt, float inFloat, float *outResult)
{
/*
PROCESSING HERE
*/
// in case of failure
if(/* failure condition here */)
{
*outResult = 0;
return false;
}
*outResult = /* your result */
return true;
}
// how to use the function
int a;
float b;
float result;
BOOL success;
success = myFunction(a, b, &result);
if(success)
{
// do whatever with your "result"
}
else
{
// NaN
}
@OliCharlesworth :하지만 그것의 C99는 답변 – Jack
하나는'0.0/0.0'을 제안했다. –
절대적으로 이식 가능한 방법은 없지만 NaN은 C89에 없으며 C99에서 필수 항목이 아닙니다. – effeffe