goto statement

ยท 661 words ยท 2 minute read

๊ฐœ์š” ๐Ÿ”—

ํ•™๋ถ€ ์‹œ์ ˆ 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 ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š” ๋˜๋„๋ก์ด๋ฉด ๋ถ„๊ธฐ๋ฌธ์„ ํ†ตํ•ด ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผํ•  ๊ฒƒ์ด๋‹ค.