Zenn
Open3

C言語のマクロ定数って型を付けられるんですか?

UkicodeUkicode

ちょっと真面目にお聞きしたいのですが、C言語のマクロ定数に型って付けられると思いますか?

というのも、Qiitaで以下の記事を書いたところ、

https://qiita.com/Ukicode/items/a44a1e2dd070562c39b0

ある人が、「マクロ定数は、型キャストができるから型が付けられる」というのに対して、CだとわかりにくいのでRustのマクロと定数を比較して教えたのですが、どうも理解いただいていないみたいで。
私の回答の仕方が間違っているのもわかっているのですが、もう回答するのが精神的に辛く、ぶった切ってしまいました。

リテラルに型があるのはわかるのですが、だからと言って「マクロ定数に型を付けられる」と主張されてもなんだかなぁと思ってしまいます。

どう思われますか?

UkicodeUkicode

簡単に書くけど、Rustで

macro_rules! x {
    () => {42};
}

って定義したときに

let y1: i32 = x!();
let y2: u8  = x!();

が型エラーにならない時点で、マクロ定数に型など付けられないことに気づいてほしかったんですけどね・・・ちなみに定数だとちゃんと型エラーになる

ログインするとコメントできます