논증 평가란 무엇입니까?
허버트 쉴트는 이렇게 말합니다.
예를 들어 코드 크기를 최소화해야 하거나 인수를 두 번 이상 평가해서는 안 되는 경우 등과 같이 실제 함수를 함수 매크로 대신 사용해야 합니다.
"논쟁은 한 번 이상 평가해서는 안 된다"는 것은 무엇을 의미합니까?
매크로를 사용하여 최대 두 개의 값을 계산해 보겠습니다.
#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
,그렇지만i
1이 증가합니다.결과적으로 다음의 가치는i++
될 것이다i + 1
.
매크로에서는 인수가 호출될 때마다 평가되어 결과 값이 발생합니다. 함수에서는 (실제) 인수가 평가되고 함수 내부의 (공식) 인수에 복사되어 부작용이 제거됩니다.
기능을 실행할 때 부작용은 신경 쓰지 않습니다.그러나 암묵적 유형의 홍보 및 캐스팅은 대신 오류가 발생하기 쉽습니다.
언급URL : https://stackoverflow.com/questions/35993029/what-is-argument-evaluation
'programing' 카테고리의 다른 글
복잡한 함수 선언을 어떻게 이해해야 합니까? (0) | 2023.10.12 |
---|---|
Visual Studio 2012의 디버그 .NET Framework 소스 코드? (0) | 2023.10.12 |
데이터베이스에 비즈니스 로직 저장 (0) | 2023.10.12 |
wpget image 편집기 이미지 저장 안 함 (0) | 2023.10.12 |
XML에서 큰따옴표 문자 탈출 (0) | 2023.10.12 |