通过将“ X”宏的名称作为主宏的参数,可以稍微概括一下X宏方法。这具有帮助避免宏名称冲突以及允许将通用宏用作“ X”宏的优点。
与X宏一样,主宏代表其重要性特定于该宏的项目列表。在此变体中,可以这样定义一个宏:
/* declare list of items */ #define ITEM_LIST(X) \ X(item1) \ X(item2) \ X(item3) \ /* end of list */
然后,可能会生成代码以打印项目名称,如下所示:
/* define macro to apply */ #define PRINTSTRING(value) printf( #value "\n"); /* apply macro to the list of items */ ITEM_LIST(PRINTSTRING)
扩展为以下代码:
printf( "item1" "\n"); printf( "item2" "\n"); printf( "item3" "\n");
与标准X宏相反,在标准X宏中,“ X”名称是主宏的内置特征,采用这种样式,随后取消定义用作参数的宏可能是不必要的,甚至是不受欢迎的(PRINTSTRING在本示例中)。
C语言允许宏带有参数。在宏定义中的参数称为“形式参数”,在宏调用中的参数称为“实际参数”,这点和函数有些类似。 对带参数的宏,在展开过程中不仅要进行字符串替换,还要用实参去替换形参。 带参宏定义的一般形式为: #define 宏名(形参列表) 字符串 在字符串中可以含有各个形参。 带参宏调用的一般形式为: 宏名(实参列表); 例如: 在宏展开时,用实参 5 去代替形参 y,经预处理程序展开后的语句
本章着眼于从Python访问C代码的问题。许多Python内置库是用C写的, 访问C是让Python的对现有库进行交互一个重要的组成部分。 这也是一个当你面临从Python 2 到 Python 3扩展代码的问题。 虽然Python提供了一个广泛的编程API,实际上有很多方法来处理C的代码。 相比试图给出对于每一个可能的工具或技术的详细参考, 我么采用的是是集中在一个小片段的C++代码,以及一些有
#define 叫做 宏定义命令,它也是C语言预处理命令的一种。所谓 宏定义,就是用一个标识符来表示一个字符串,如果在后面的代码中出现了该标识符,那么就全部替换成指定的字符串。 我们先通过一个例子来看一下 #define 的用法: 运行结果: 120 注意第 6 行代码 , 被 代替了。 就是宏定义, 为宏名, 是宏的内容(宏所表示的字符串)。在预处理阶段,对程序中所有出现的“宏名”,预处理器都会
多亏这些改变,我们可以去创建自己的builder和代码块。我们已经在使用一些有趣的函数,比如with。如下简单的实现: inline fun <T> with(t: T, body: T.() -> Unit) { t.body() } 这个函数接收一个T类型的对象和一个被作为扩展函数的函数。它的实现仅仅是让这个对象去执行这个函数。因为第二个参数是一个函数,所以我们可以把它放在圆括号外面,所以我们
Solidity是一种智能合约高级语言,运行在HPB的主链之上--即虚拟机(EVM).这种语言首先大范围的使用是在Etherum主链上,现在几乎大部分区块链项目都支持Solidity语言,同样HPB可以完美支持此高级语言。 语言特性 Solidity的语法接近于Javascript,是一种面向对象的语言。但作为一种真正意义上运行在网络上的去中心合约,它又有很多的不同,下面列举一些: 以太坊底层是基
C/C++ 语言参考 基本C/C++ 预处理命令 操作符优先级 转义字符 ASCII码表 基本数据类型 关键字 标准 C 库: Standard C I/O Standard C String & Character Standard C Math Standard C Time & Date Standard C Memory Other standard C functions C++ C++