a = b += c++ - d + --e / -f
이 표현식은 괄호가 없어 가독성이 상당히 떨어짐. 표 4-2를 이용해, 이 표현식에 괄호를 붙여보자.
// 1. 후위에 괄호
a = b += (c++) - d + --e / -f
// 2. 전위, 단항음수연산자에 괄호
a = b += (c++) - d + (--e) / (-f)
// 3. 나눗셈에 괄호
a = b += (c++) - d + ((--e) / (-f))
// 4. 뺄셈, 덧셈에 괄호
a = b += ((c++) - d) + ((--e) / (-f))
a = b += (((c++) - d) + ((--e) / (-f)))
// 5. 할당에 괄호
a = (b += (((c++) - d) + ((--e) / (-f))))
(a = (b += (((c++) - d) + ((--e) / (-f)))))
📌 값을 표현할 때의 부분식의 순서
- 대부분의 표현식은 부분식이 평가되는 순서와 상관없이 같은 값을 가짐. 허나, 부분식이 피연산자를 수정하는 경우 이는 달라질 수 있음. 아래의 예시로 확인해보자.
a = 5;
c = (b = a + 2) - (a = 1);
- 두 번째 구문의 실행은 정의되지 않음. 대부분의 컴파일러의 경우 c의 값은 6(7-1)이거나 2(3-1)일 것
- 부분식 (b = a + 2)를 먼저 평가했다면 b는 7, c는 6
- 부분식 (a = 1)을 먼저 평가했다면 b = 3, c = 2
✅ 이러한 문제를 방지하기 위해, 부분식에서는 할당연산자를 지양하는 것이 좋음.
💡 본 내용은 K.N.King의 C Programming: A Modern Approach 책을 참고하였습니다.
'📚 STUDY > 🔥 C' 카테고리의 다른 글
Q&A (pow, fmod, 연산자) (1) | 2024.09.03 |
---|---|
[4-5] 표현문 (0) | 2024.09.03 |
[4-3] 증감연산자 (0) | 2024.09.03 |
[4-2] 할당연산자 (0) | 2024.09.03 |
[4-1] 산술연산자 (1) | 2024.09.03 |