正经题解 | 终极万能宏集合
2026-08-14 17:30:53
发布于:湖北
话说书接上回,自从我用了二进制高精度后,我对A+B Problem的感情就好似那滔滔江水流向汪洋大海那般深情和澎湃,让我不得不再写一篇题解,书写我那对于A+B的真情。
看了题解里十八路英雄好汉、文人骚客的激情与文采,使我的文采灵感也如那汩汩清澈泉水在我那顽石脑袋里喷涌而出。
看了MYJ888仁兄的诗篇宏孩儿和XiaoXiaoWangChen的佳作下划线文学令我那恰同白纸画布一般愚钝而富有生机可能的大脑又想起了新的做法。
宏,Macro,正是C++从C语言前辈身上继承 (纯继承,没有多态和重载) 来的宝贵智慧,更是百年的传承。祂可以帮我们一行代码便可以写出高效易懂的min/max函数,还帮助我们度过const设下的鸿沟,如那摩西点杖分开红海。
所以,新的做法正是从前人的智慧与传承中汲取经验与力量!
我根据这条先哲箴言,设计出了新的宏集合,而这组宏集合,是真正可用、通用的!
#include <bits/stdc++.h>
// 基本约定/入口
#define import(namesp) using namespace namesp;
// 变量声明/设定
#define defvar(type, name) type name;
#define defarg(type, name) type name
#define defset(type, name, value) defarg(type, name) = value;
#define dfltarg(type, name, value) defarg(type, name) = value
#define defarr(type, name, ...) defarg(type, name) = {##__VA_ARGS__};
#define setvar(name, new_val) name = new_val;
// 指针
#define defpt(type, name) type *name = new type;
#define ptfrom(name, from) auto *name = &(from);
#define setpt(pt, value) *pt = (value);
#define tmppt(type, name, ...) type<##__VA_ARGS__> *name = new type;
#define ptarg(type, name) type *name
#define pttmparg(type, name, ...) type<##__VA_ARGS__> *name
// 模板
#define tmpvar(type, name, ...) type<##__VA_ARGS__> name;
#define tmparg(type, name, ...) type<##__VA_ARGS__> name
#define tmpset(type, name, value, ...) tmparg(type, ##__VA_ARGS__) = value;
#define dflttmp(type, name, value, ...) tmparg(type, ##__VA_ARGS__) = value
// 块
#define callb(...) (##__VA_ARGS__)
// 函数
#define defunc(type, name, body, ...) defarg(type, name)(##__VA_ARGS__) body
// 运算符
#define alone(val) (val);
#define in ::
#define cntadd ++;
#define cntsub --;
#define arrin(name, key) name[key]
#define meth(name, funcname, ...) name.funcname(##__VA_ARGS__);
#define field(name, fieldname) name.fieldname
#define call(funcname, ...) funcname(##__VA_ARGS__);
#define ptmeth(pt, funcname, ...) pt->funcname(##__VA_ARGS__);
#define ptfield(pt, fieldname) pt->fieldname
#define breverse(name) (~(name))
#define address(name) (&(name))
#define pt(name) (*(name))
#define movel <<
#define mover >>
#define band(first, second) ((first) & (second))
#define xor(first, second) ((first) ^ (second))
#define bye(value) return value;
#define goodbye return 0;
这套就是我的 光年雪球怒发冲冠飓风猎奇无分号之M集合。
写出来的A+B主程序如下:
C语言风格
defunc(void, Plus, {
setpt(c, pt(a) + pt(b))
}, ptarg(int, a), ptarg(int, b), ptarg(int, c))
defunc(void, Display1Number, {
call(printf, "%d", *a)
}, ptarg(int, a))
defunc(void, Read2Data, {
call(scanf, "%d %d", a, b)
}, ptarg(int, a), ptarg(int, b))
defunc(int, main, {
defpt(int, a)
defpt(int, b)
defpt(int, c)
call(Read2Data, a, b)
call(Plus, a, b, c)
call(Display1Number, c)
goodbye
})
C++风格
import(std)
// plus函数:接受两个参数,为加数,返回这两个值的和。
defunc(int, myplus, {
bye(a + b)
}, defarg(int, a), defarg(int, b))
// 主程序
defunc(int, main, {
defvar(int, a)
defvar(int, b)
alone(cin mover a mover b)
alone(cout movel myplus(a, b) movel endl)
goodbye
})
这里空空如也


















有帮助,赞一个