自带延迟的tg版微博
#CPP

// MAP(f, a, b, c...)
// -> f(a) , f(b) , f(c) ...
#define MAP(macro, ...) __VA_OPT__(EXPAND(MAP_IMPL(macro, __VA_ARGS__)))
#define MAP_IMPL_AGAIN() MAP_IMPL
#define MAP_IMPL(macro, first, ...) \
    macro(first) __VA_OPT__(, MAP_IMPL_AGAIN PARENS (macro, __VA_ARGS__))

// MAP_WITHOUT_COMMA(f, a, b, c...)
// -> f(a) f(b) f(c) ...
#define MAP_WITHOUT_COMMA(macro, ...) __VA_OPT__(EXPAND(MAP_WITHOUT_COMMA_IMPL(macro, __VA_ARGS__)))
#define MAP_WITHOUT_COMMA_IMPL_AGAIN() MAP_WITHOUT_COMMA_IMPL
#define MAP_WITHOUT_COMMA_IMPL(macro, first, ...) \
    macro(first) __VA_OPT__(MAP_WITHOUT_COMMA_IMPL_AGAIN PARENS (macro, __VA_ARGS__))
潜伏博士
https://www.scs.stanford.edu/~dm/blog/va-opt.html #CPP
#include <iostream>
using namespace std;



#define PARENS ()

#define EXPAND(...) EXPAND4(EXPAND4(EXPAND4(EXPAND4(__VA_ARGS__))))
#define EXPAND4(...) EXPAND3(EXPAND3(EXPAND3(EXPAND3(__VA_ARGS__))))
#define EXPAND3(...) EXPAND2(EXPAND2(EXPAND2(EXPAND2(__VA_ARGS__))))
#define EXPAND2(...) EXPAND1(EXPAND1(EXPAND1(EXPAND1(__VA_ARGS__))))
#define EXPAND1(...) __VA_ARGS__

#define LOG(tag, ...) log(tag, PREPEND_NAMES(__VA_ARGS__))
#define PREPEND_NAMES(...) __VA_OPT__(EXPAND(PREPEND_NAMES_IMPL(__VA_ARGS__)))
#define PREPEND_NAMES_IMPL(first, ...) \
    PREPEND_ITEM_NAME(first) __VA_OPT__(, PREPEND_NAMES_IMPL_AGAIN PARENS (__VA_ARGS__))
#define PREPEND_NAMES_IMPL_AGAIN() PREPEND_NAMES_IMPL
#define PREPEND_ITEM_NAME(item) #item " =", item, "|"

template<typename T, typename... Args>
void log(T tag, Args... args) {
    cout << tag << ' ';
    (..., (cout << args << ' ')) << endl;
}


int main() {
    int a, b, c, d, e;

    LOG("[nums]", a, b, c, d, e);
}


#CPP
成功了!
宏,好牛逼;宏,好傻逼。
觉得贵是我的问题,不是他的问题
暴论:任何语言学到底层最后终究要回归到 C 和 C++
恋爱还是看别人谈最爽
看了大名鼎鼎的死月写的 node.js 相关书籍,让我怀念起以前读高中的时候数学能考 140 的同桌给我讲解数学题的感觉

明明全都是字怎么凑在一起我全看不懂
如果你的屏幕时间有超过 60% 的时间用于看文字而不是图像,那你应该拥有一台 4k 显示器,真的
Back to Top