본문 바로가기
📚 STUDY/🔥 C

[4-4] 표현식 평가

by 엄지잉 2024. 9. 3.

[표 4-2] 일부 C 연산자 표

 

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