【Rust】マクロ

マクロの基本ルール

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);
}

関数ではなくわざわざマクロを使うメリットがいまいちイメージが掴めないが機能的に便利そうではある。