간의 조합 I는 다음의 함수 (bool
단지 #define bool int
매크로이다) 가지고매크로 - 함수와 승산
bool v2dAngleRad(Vector2D* v2d1, Vector2D* v2d2, double* angle);
그것은 두 차원 벡터 (결과 angle
에 저장된다) 사이의 각도를 반환한다. 반환 값 "boolean"을 사용하여 작업이 성공했는지 확인하는 데 사용됩니다.이 경우에는 true
(내 경우 #define true 1
;) 인 경우에만 전달 된 인수가 확인됩니다. 있다. 나는 어떤 일이 실패 할 가능성 때문에 그 일을 더 많이 또는 덜하게 만들었고, 예외적 인 경우가 없기 때문에 C
에이 상황을 해결하는 가장 좋은 방법 인 것으로 알고있다. v2dAngleRad(...)
에서 잘못 될 수있는 유일한 것은 v2d1
및/또는 v2d2
에 대한 잘못된 참조가 전달 된 경우이며, 어떤 경우에는 false
을 반환하려고합니다.
그 외에도 매크로를 사용하여 메모리를 새로 고치고 나중에 다른 기능을 사용하여 도수 변환을 처리하고 싶었습니다. 나는 다음과 같은 매크로를 정의하려면 :
#define v2dAngleDeg(v2d1, v2d2, angle) ... // angle*180./M_PI
문제는이다 인해 제 기능을 나는 방법을 찾아 드릴 수 없습니다 (반환 값과 포인터로 전달 된 인수) 정의되는 방식 매크로 정의에서 angle
을 사용하여 함수 호출에 의해 채워진 후이를 도수로 변환하는 방법. 부울 반환 값에 대한 추가 검사가 수행되어야하며 작업이 성공적으로 수행 된 경우에만 변환이 수행되어야합니다.
내 기능은 내가이 꽤 바보 보일 수 있습니다 알고
#define v2dAngleDeg(v2d1, v2d2) (v2dAngleRad(v2d1, v2d2)*(180.0/M_PI))
을 할 수 있었을 것이다 나는 실제로 아마거야 각도를 반환이
double v2dAngleRad(Vector2D* v2d1, Vector2D* v2d2);
같았다 경우 이 기능을 처리하기 위해 별도의 함수를 작성하는 방법을 알고 싶습니다. 일반적으로 (각도 나 토마토를 처리해도 상관 없습니다).
매크로를 사용하는 이유가 전혀 없습니다. 함수가 할 수 있으면 매크로를 사용하지 마십시오.컴파일러를 신뢰하지 않는다면, 함수를'inline'으로 만드십시오. – Olaf
아, 고마워! 나는 그들이 표준 라이브러리에 이런 것을 포함 시켰는지조차 몰랐다. – rbaleksandar
그럴 경우 먼저 현대 C 책을 읽고 싶을 것입니다. '_Bool' resp. 'bool' 매크로는 17 년 이래로 표준입니다. 다른 무엇을 놓쳤는 지 생각해보십시오. '인라인'함수. – Olaf