tettyあのブログ

こんにちは。ピカピカの高校生です。

defineは神。

巷には反define派をいう訳の分からない人たちがいるのをご存知だろうか。
この記事ではそんな可哀そうな人達の洗脳を解くためにdefineの様々な利点を挙げる。

便利

defineすることによってよく使う定型文的なものを一つに纏めることが出来る。
例えば、std::vectorイテレータ、sort()するときに毎回.begin()と.end()を用意するのが面倒である。そんな時に

#define vecALL(vec) (vec).begin() , (vec).end() 

と定義してあげれば、そんな煩わしいことをしなくて済む。
また、競プロなどでよくN次元配列(N=1,2)を入力として与えられることもあるがこの入力がまた面倒である。そんな時にも

#define vecIN(vec,n) for(int i= 0;i<(n);i++)cin>>(vec)[i]
#define vvecIN(vec,i,j) for(int ip=0;ip<(i);ip++)for(int jp=0;jp<(j);jp++)cin>>(vec)[ip][jp]

このようにすれば未来永劫子々孫々生々世々万劫末代定型文を入力する苦痛な時間からfreeされる。


え、inline関数使えって?
黙れ。
inline関数だとIDEの色分けが普通の関数と一緒になって分かりにくくなり、一々定義まで戻ってこれはinlineで展開されるんだな、と確認しなければなくなる。
しかし、マクロだと大抵のIDEは関数と色分けが別なのでこれはマクロだな、展開されるんだな。という風になるのである。
また、これと同じ理論展開によりconstexprが普通の変数と見分けがつかないということも言える。

環境に良い

ライブラリを使用する時に、「この機能いらねぇなぁ~」とか「この機能ゴミだなぁ~」とか思ったことはないだろうか。
defineとifdefの合わせ技により利用者がいらんと思う機能をバッサリ切り捨て元から無かったようにできるのだ。
これにより実行ファイルの容量が減り、容量にとって優しくなれるのだ。

公平性の確保

constexprやinlineを使っているとdefineを使ったころにせっせこせっせこ動いてたプリプロセッサの出番が全てコンパイラに奪われてしまう。
人がAIに仕事を奪われる、という話がビルドで意図せず少々違う形ではあるが再現されてしまっていたのである。
こんなことはあってはならない。プリプロセッサに仕事を与えるという意味でもマクロは大切なのである。

最後に

これでdefineの重要性が分かっただろうか。それでもconstexprとdefineは同じなのでconstexprを使えという人がいるかもしれないが、そういう人達はもうが反defineに侵されてしまっているので手の打ち所がないので諦めるしかない
しかし、大半のマトモな人たちはdefineが良いということが分かってくれたこであろう。そうであれば、私は十分である。
これからも反define派が出てこないことを祈り、また、不幸にも反define派になってしまった迷える子羊にはその洗脳がいち早く解けることを祈る。