๊ฐ์ ๐
ํ๋ถ ์์ c์ธ์ด๋ฅผ ๋ฐฐ์ธ ๋ ‘goto’ ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ ํฐ๋ถ์ํ ์ ๋๋ก ์ ๋ ์ฌ์ฉํ๋ฉด ์๋๋ ๋ฌธ๋ฒ์ผ๋ก ๋ฐฐ์ ๋ค. ๊ทธ ์ด์ ๋ ์์ธํ๊ฒ ์๋ ค์ฃผ์ง ์์์ง๋ง ๋๋๋ก์ด๋ฉด goto ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ถ๊ธฐ๋ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ๋๋ก ์ฝ๋ฉ์ ํ์๊ณ ์ ํ๋ ์์ ๊ณ ํ๋ ์ผ๋ก ์ฌ๋ผ๊ฐ์๋ก c์ธ์ด ๋์ ์๋ฐ๋ c++, c# ๋ฑ์ ๋ฐฐ์ฐ๋ฉด์ goto๋ ๋จธ๋ฆฟ์์์ ์ํ์ ธ๊ฐ๋ค.
์
์ฌํ๊ณ ๋์ ๋๋ผ์ด๋ฒ ์ฝ๋๋ฅผ ๋ณด๋ ๊ฐ๊ฐํ goto ๋ฌธ์ด ์ฌ์ฉ๋ ๊ฒ๋ค์ ๋ณด๊ณ ์ด๊ฒ์ด ๊ณผ์ฐ ๋ฆฌํฉํ ๋ง์ ํด์ผํ๋ ๋์์ธ๊ฐ์ ๋ํด ์ ์ ์๊ฐํด๋ณด์๋ค. ๋ง์ฝ ์๋์ ๊ฐ์ด ์ฝ๋๊ฐ ์งํ๋ ๊ฒฝ์ฐ, ๋ฐ๋์ ๋๋จธ์ง ์ฝ๋๋ฅผ ๋ถ๊ธฐ๋ฌธ์ผ๋ก ์ฒ๋ฆฌํด์ผํ ํ์๊ฐ ์์๊น? ์๋๋ฉด ์ฌ๊ธฐ์ ๊ธฐ์ return
๋ฌธ์ ์ฌ์ฉํด์ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์ ๊ณง๋ฐ๋ก ํจ์๋ฅผ ๋น ์ ธ๋๊ฐ๊ฒ ํด์ผํ ๊น?
func() {
int ret = 0;
ret = check_something();
if (ret < 0) {
printk(KERN_ERR "ERROR!\n");
} else {
// remains..
}
}
func2() {
int ret = 0;
ret = check_something();
if (ret < 0) {
printk(KERN_ERR "ERROR!\n");
return -EINVAL;
}
// remains..
return ret;
}
Stack Overflow์์ ๊ด๋ จ ๋ด์ฉ์ ์ฐพ์๋ณด๋ ์ฌ๋ฏธ์๋ ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ๋ค. ์ฝ๋ ๊ณณ๊ณณ์์ ๋ณด์ด๋ do - while(0)
์ด ๋์ฒด ์ ์ฌ์ฉ๋๋ ๊ฑธ๊น ํ๊ณ ๊ถ๊ธํ์๋๋ฐ, [[๋งํฌ|https://stackoverflow.com/questions/243967/do-you-consider-this-technique-bad]]๋ฅผ> ๋ณด๋ ์ด์ ์์ผ ์ ์ฌ์ฉํ๋์ง๋ฅผ ์ ์ ์์๋ค. ์ ๋ต์ ์์ง๋ง ์ต๋ํ ๊ฐ๊ฒฐํ๊ณ ์ดํดํ ์ ์๋๋ก ์งค ์๋ง ์๋ค๋ฉด ๊ทธ๋ฌํ ๋ฌธ๋ฒ์ ๋ฌด์จ ๋ฌธ์ ๊ฐ ์์๊น? ๋ฌด์กฐ๊ฑด ์ฌ์ฉ์ ํ์ง ๋ง์์ผ ํ ๊ฒ์ด ์๋๋ผ, ๋์ ๋ฐ๋ผ์ ์ ์ ํ๊ฒ ์ฌ์ฉํ๊ณ , ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค๋ฉด goto๋ก ๊ฐ๊ฒฐํ๊ฒ ์งค ์ ์์ ๊ฒ์ด๋ค. ํจ์๊ฐ ๊ธธ์ง ์๊ณ ์ฌ๊ธฐ ์ ๊ธฐ์ ์ฌ์ฉ๋์ง ์๋๋ค๋ฉด goto ๋ฌธ์ ์ฌ์ฉํ ์ ์์ง๋ง ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ๋๋๋ก์ด๋ฉด ๋ถ๊ธฐ๋ฌธ์ ํตํด ์ ์ ํ๊ฒ ์ฒ๋ฆฌํด์ผํ ๊ฒ์ด๋ค.