오늘은 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
'C언어' 카테고리의 다른 글
[C언어] 타입 한정자(type qualifiers)란? (0) | 2024.10.18 |
---|---|
GCC(GNU Compiler Collection)란? (0) | 2024.10.18 |
[C언어] typedef uint8_t BOOL (2) | 2024.10.17 |
[C언어] 댕글링 포인터(Dangling Pointer)란? (0) | 2024.10.15 |
[C언어] main문이란? (0) | 2024.10.14 |