マクロの基本ルール
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);
}
関数ではなくわざわざマクロを使うメリットがいまいちイメージが掴めないが機能的に便利そうではある。