κ°μ π
컀λ 맀ν¬λ‘μ do { .. } while(0)
ꡬ문μ μ¬μ©νλ κ²μ λ³΄κ² λμλ€. μ¬λ΄ μ½λμμλ μ΄λ¬ν ꡬ문λ€μ΄ λ§μ΄ 보μλλ° μ²μμλ μλ―Έμμ΄ μ΄μνκ² μ§μ¬μ§ μ½λλΌκ³ μκ°νλ€. κ·Έλ°λ° κ·Έλ° κ΅¬λ¬Έμλ μλ―Έκ° μμλ€. https://kernelnewbies.org/FAQ/DoWhile0 λ§ν¬λ₯Ό 보면 μ΄λ¬ν ꡬ문μ λ§λ μ΄μ κ° κΈ°μ λμ΄ μλ€. μ΄λ¬ν ꡬ문μ λν μ΄μ λ μλμ κ°λ€.
- λΉ κ΅¬λ¬Έ(empty statement)λ μ»΄νμΌλ¬κ° κ²½κ³ λ₯Ό λΈλ€.
- μ§μ λ³μλ₯Ό μ μΈν μ μλ ꡬμμ λ§λ€μ΄μ€λ€.
- 쑰건문μ ν¬ν¨ν μ½λμμ 볡μ‘ν ννμ 맀ν¬λ‘λ₯Ό μ¬μ©ν μ μλλ‘ ν΄μ€λ€.
쑰건문μ ν¬ν¨ν μ½λμμμ 맀ν¬λ‘ μ¬μ© π
μ΄ λ μμ²λΌ μ μν 맀ν¬λ‘λ₯Ό 쑰건문과 ν¨κ» μ¬μ©νκ² λλ€λ©΄ μλμ κ°μ΄ μ¬μ©νκ² λλ€.
κ·Έλ¦¬κ³ μ΄ κ΅¬λ¬Έμ 맀ν¬λ‘κ° μ μ©λ κ²μ μ΄ν΄λ³΄λ©΄,
μμ μ½λμ²λΌ μ μ©λ κ²μ΄λ€. μ΄ λ λ¬Έμ κ° λλ κ²μ do_something_useful(blah);
κ° μ‘°κ±΄μ κ΄κ³μμ΄ μνλλ€λ μ μ΄λ€. μ΄λ¬ν 맀ν¬λ‘κ° μ‘°κ±΄λ¬Έμμ μ±κΈλΌμΈ ꡬ문μΌλ‘ μ¬μ©λλ€λ©΄ λ¬Έμ κ° λ μ μκΈ°μ, do { … } while(0) μ μ¬μ©νμ¬ μ΄λ¬ν λ¬Έμ λ₯Ό λ°©μ§νλ€.
μλμ κ°μ΄ μΌλ°μ μΈ λΈλ‘ ꡬ문μ μ¬μ©νλ€κ³ κ°μ νμ λ, νΉμ ν κ²½μ°μ μ μ½λλ λμνμ§ μλλ€.
μ΄ λ, 맀ν¬λ‘λ₯Ό μ μ©νλ©΄ μλμ κ°μ΄ μ μ©λμ΄ λ²λ¦°λ€.
ifλ¬Έ λΈλ‘ λ€μμ λμ€λ μΈλ―Έμ½λ‘ μΌλ‘ μΈν΄ “parse error before else” λ¬Έμ κ° λ°μνκ² λλ€. μ΄ λ do {…} while(0) ꡬ문μ μ΄μ©νμ¬ λ§€ν¬λ‘λ₯Ό μ μνλ©΄ μλμ κ°μ΄ κ΄λ ¨ μλ¬λ₯Ό νΌν μ μλ€.
λ체 ꡬ문 π
gcc
μμ μ΄ do-while-0 ꡬ문μ λ체ν μ μλ ꡬ문 ννμ μΆκ°νλ€. μλμ κ°μ μ΄λ¬ν ννμ μΈκΈν λͺ¨λ μ΄μ μ κ°λ λμμ κ°λ
μ±λ 보μ₯λλ€.