programing

논증 평가란 무엇입니까?

css3 2023. 10. 12. 23:25

논증 평가란 무엇입니까?

허버트 쉴트는 이렇게 말합니다.

예를 들어 코드 크기를 최소화해야 하거나 인수를 두 번 이상 평가해서는 안 되는 경우 등과 같이 실제 함수를 함수 매크로 대신 사용해야 합니다.

"논쟁은 한 번 이상 평가해서는 된다"는 것은 무엇을 의미합니까?

매크로를 사용하여 최대 두 개의 값을 계산해 보겠습니다.

#define MAX(a, b) ((a) < (b) ? (a) : (b))

그런 다음 이렇게 사용합니다.

int x = 5;
int y = 10;
int max = MAX(x++, y++);

그런 다음 매크로가 다음으로 확장됩니다.

int max = ((x++) < (y++) ? (x++) : (y++));

보다시피, 두 개 중 하나에 대한 증분 연산이x아니면y통과한 각 인수를 한 번만 평가하는 함수가 있다면 발생하는 것이 아니라 번 발생합니다.


또 다른 중요한 점은 매크로에서 괄호를 사용하는 것입니다.다른 간단한 매크로를 사용해 보겠습니다.

#define MUL(a, b) a * b

이제 매크로를 호출하면 다음과 같이

int sum = MUL(x + 3, y - 2);

그러면 확장은

int sum = x + 3 * y - 2;

연산자 우선 순위로 인해 다음과 같습니다.

int sum = x + (3 * y) - 2;

종종 기대했던 것이 아닌 경우가 있습니다.(x + 3) * (y - 2).

이 문제는 함수를 사용하여 "해결"되기도 합니다.

때때로 논쟁은 부작용을 일으킵니다.

예를 들어, 다음의 값.i++i,그렇지만i1이 증가합니다.결과적으로 다음의 가치는i++될 것이다i + 1.

매크로에서는 인수가 호출될 때마다 평가되어 결과 값이 발생합니다. 함수에서는 (실제) 인수가 평가되고 함수 내부의 (공식) 인수에 복사되어 부작용이 제거됩니다.

기능을 실행할 때 부작용은 신경 쓰지 않습니다.그러나 암묵적 유형의 홍보 및 캐스팅은 대신 오류가 발생하기 쉽습니다.

언급URL : https://stackoverflow.com/questions/35993029/what-is-argument-evaluation