Rust: #! [no_std]๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด 'panic! ( "{{}}")'๋ฐ 'panic! ( "{{}}",)'์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2018๋…„ 02์›” 07์ผ  ยท  1๋…ผํ‰  ยท  ์ถœ์ฒ˜: rust-lang/rust

# 46241์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋™์•ˆ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ›„ํ–‰ ์‰ผํ‘œ ์ง€์›์— ๋Œ€ํ•ด ์—ญ์ปด ํŒจํŠธ ์œ„ํ—˜์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๋ ‡์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

libstd / macros.rs

macro_rules! panic {
    () => (/* default message */);
    ($msg:expr) => (/* use msg as literal */);
    ($fmt:expr, $($arg:tt)+) => (/* use format_args! */);
}

libcore / macros.rs

macro_rules! panic {
    () => (/* default message */);
    ($msg:expr) => (/* use msg as literal */);
    ($fmt:expr, $($arg:tt)*) => (/* use format_args! */);
}

์ฐจ์ด์ ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?


std์˜ ์ •์˜๋Š” ๋‹จ์ผ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ๋’ค์˜ ํ›„ํ–‰ ์‰ผํ‘œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

fn main() {
    panic!("a");
    panic!("a",); //~ ERROR unexpected end of macro invocation

    panic!("{}");
    panic!("{}",); //~ ERROR unexpected end of macro invocation
}

core์˜ ์ •์˜๋Š” ํ›„ํ–‰ ์‰ผํ‘œ๋ฅผ ํ—ˆ์šฉํ•˜์ง€๋งŒ ์ž ์žฌ์ ์œผ๋กœ ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ฝ”๋“œ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

#![no_std]

fn main() {
    panic!("a");
    panic!("a",);

    panic!("{}");
    panic!("{}",); //~ ERROR 1 positional argument in format string, but no arguments were given
}

~ ๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ๋„ libcore์˜ ์ •์˜๊ฐ€ ๋‘ ์–‘์‹์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ปดํŒŒ์ผ๋˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์— panic!(<literal>,) ๋ฐ panic!(<literal>) ์— ๋Œ€ํ•ด ๋™๋“ฑํ•œ ๋™์ž‘์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค . ์ฆ‰ panic!(<literal>,) ๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ ์•ˆ์ „ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค panic!(<literal>) ์ฒ˜๋Ÿผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ~

A-macros C-bug T-libs

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์“ฐ๋ ˆ๊ธฐ. ๋‚ด๊ฐ€ ๋งํ•˜๊ณ ์žˆ๋Š” ์ผ์ข…์˜ ์—ญ ํ˜ธํ™˜ ์œ„ํ—˜์˜ ์˜ˆ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜๋‚ ์˜ Rust์—์„œ๋Š” ๋‹ค์Œ ๋‘ ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

#![no_std]

fn main() {
    panic!("{{}}");  // panics with "{{}}"
}
#![no_std]

fn main() {
    panic!("{{}}",);  // panics with "{}"
}

>๋ชจ๋“  ๋Œ“๊ธ€

์“ฐ๋ ˆ๊ธฐ. ๋‚ด๊ฐ€ ๋งํ•˜๊ณ ์žˆ๋Š” ์ผ์ข…์˜ ์—ญ ํ˜ธํ™˜ ์œ„ํ—˜์˜ ์˜ˆ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜๋‚ ์˜ Rust์—์„œ๋Š” ๋‹ค์Œ ๋‘ ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

#![no_std]

fn main() {
    panic!("{{}}");  // panics with "{{}}"
}
#![no_std]

fn main() {
    panic!("{{}}",);  // panics with "{}"
}
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰