C언어

[C언어] 다중 평가 문제

_minit 2024. 10. 17. 15:48

오늘은 C언어의 다중 평가 문제에 대해서 알아보도록 하겠다.

다중 평가 문제란 매크로에서 매개변수를 여러 번 평가함으로써 예상치 못한 결과가 발생하는 문제를 말한다. 특히 매개변수가 함수 호출이나 증감 연산자 같은 표현일 때 문제가 될 수 있다.

 

매크로는 텍스트 치환 방식으로 처리되기 때문에, 매크로 내부에서 매개변수를 여러 번 사용하면 그 매개변수가 반복 평가되게 된다.

 

예시)

#define ABS(a) ((a) > 0 ? (a) : (-(a)))

int x = 3;
int result = ABS(x++);

위 코드에서 ABS(x++)를 호출하게 되면, 매크로 다음과 같이 치환하게 된다.

result = ((x++) > 0 ? (x++) : (-(x++)));

1. (x++) > 0 에서 x++를 거쳐 4가 된다.

2. 조건이 참이므로 (x++)가 실행되어 5가 된다.

 

이처럼 매개변수가 매크로 내부에서 여러 번 사용될 때 발생하는 문제를 다중 평가 문제라고 한다.

 

해결방안

해결 방안으로는 매크로 함수 대신 함수를 사용하면 된다.

728x90