マクロの基本ルール
macro_rules! foo { () => () } foo!();
exprは式。マッチャーにはitem, block, stmt, pat, ty, ident, path, tt, metaなどがある。
macro_rules! log { ($x:expr) => { println!("{}", $x);} } fn main(){ log!("ABC..."); }
### c言語のマクロ
defineとはプリプロセッサへの指示内容の一つ。
#include <stdio.h> #define PI 3.14f #define CIRCLE_RATIO "円周率" int main(void) { double area = PI * 10 * 10; char *ptr = CIRCLE_RATIO; printf("%sは: %f", ptr, PI); printf("半径10の円の面積は: %f\n", area); return 0; }
#include <stdio.h> #define PI 3.14 #define area(r)(PI*r*r) #define prt(f) printf("%f\n", f) int main(void) { prt(area(10.0f)); return 0; }
macro_rules! area { ($e1:expr, $e2:expr) => { $e1 * $e2 * $e2} } macro_rules! prnt { ($e:expr) => { println!("{}", $e);} } fn main(){ let PI : f32 = 3.14; let result = area!(PI, 5.0); prnt!(result); }
関数ではなくわざわざマクロを使うメリットがいまいちイメージが掴めないが機能的に便利そうではある。