为什么单独开一篇这个文章,主要是因为我在学EOSIO的源码,源码中多出使用这些宏定义。
宏这个让人恨的东西。。。
如果你学习一门语言,你一定要知道什么是语法,什么是语义,宏这个东西,就是一个重新定义了一套新语法的东西,也就是说,即便你会C++或者C语言语法,也无济于事,这个宏定义出来的是另一套语法规则,所以有些宏的语法和语义是要总结的,你如果你好奇宏是怎么做的,你可以展开看下,不过你会很烦的!!!那就不是给人看的,那是给机器看的!!!
BOOST_PP_STRINGIZE: stringizes its argument after it has been expanded. 简单说就是现将表达式展开,展开后的内容在转成字符串。
对于这个宏,说些其他的,这个宏非常有用,他可以展示你宏的替换结果!!!这样你需要看某个宏展开的结果,你可以使用这个宏!!!给一个简单的例子:
#include <iostream>
#include <boost/preprocessor.hpp>
#define SUM(n, m) n + m
int main() {
std::cout << BOOST_PP_STRINGIZE(SUM(1,2)) << std::endl;
return 0;
}
运行结果:
1 + 2
BOOST_PP_SEQ_FOR_EACH: 用于将一个序列中参数依次按照指定宏进行展开
BOOST_PP_SEQ_NIL: 就是一个序列的空占位符
网友评论