编写宏的有效方法

e良师益友网?】在编写宏的时候或许会存在一些问题,比如通常的目标是书写一个包含单独的函数调用语句的宏。这意味着“调用者” 需要提供最终的分号, 而宏体则不需要。因此宏体不能为简单的括弧包围的复合语句, 因为如果这样, 调用的时候就会发生语法错, 就像在if/else 语句的if 分支中多了一个else 分句一样。

因此个人认为传统的结局方案就是这样使用:
#define MACRO(arg1, arg2) do { \
/* declarations */ \
stmt1; \
stmt2; \
/* ... */ \
} while(0) /* 没有结尾的; */
当调用者加上分号后, 宏在任何情况下都会扩展为一个单独的语句。优化的编译器会去掉条件为0 的“无效” 测试或分支, 尽管lint 可能会警告。

如果宏体内的语句都是简单语句, 没有声明或循环, 那么还有一种技术, 就是写一个单独的, 用一个或多个逗号操作符分隔的表达式。这种技术还可以“返回” 一个值。

想了解更多编程语言教程集合可登陆e良师益友网。

时间: 2024-08-28 05:59:00

编写宏的有效方法的相关文章

JavaScript学习总结(十四)——JavaScript编写类的扩展方法

在?J?a?v?a?S?c?r?i?p?t?中?可以使?用?类的p?r?o?t?o?t?y?p?e属性来?扩?展?类的属?性?和?方?法,在实际开发当中,当JavaScript内置的那些类所提供的动态方法和动态属性不满足我们实际开发时,我们就可以通过"prototype"属性给自定义类添加方法和属性或者扩展原有的类中的方法和属性. 一.扩展JavaScript内置类,添加动态方法 语法格式: 类名.prototype.方法名 = function([param1],[param2],.

Java -- JDBC_利用反射及 JDBC 元数据编写通用的查询方法

先利用 SQL 进行查询,得到结果集: 利用反射创建实体类的对象:创建对象: 获取结果集的列的别名: 再获取结果集的每一列的值, 结合 3 得到一个 Map,键:列的别名,值:列的值: 再利用反射为 2 的对应的属性赋值:属性即为 Map 的键,值即为 Map 的值. 使用 JDBC 驱动程序处理元数据 Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表,表中的各个列,数据类型,触发器,存储过程等各方面的信

编写高质量equals方法

什么是equals方法 指示其他某个对象是否与此对象相等,equals方法存在Object类中,我们编写的类继承Object,可以覆盖Object的equals方法来实现我们的逻辑,去判断两个对象是否相等. Object类中的equals方法 一起来看看Object类中的源代码 public boolean equals(Object obj) { return (this == obj); } 我们可以观察到几点: equals方法是public修饰的,外部类是可以访问的 equals方法的返

c语言的宏的使用方法(转自他人)

C语言宏定义技巧 周四, 2008年 10月 09日 14:10 高级管理员 C/C++编程 - C语言基础   1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植. typedef  unsigned char      boolean;     /* Boolean value type. */typedef  unsigned

JDBC学习笔记——利用反射及JDBC元数据编写通用的查询方法

我们的查询操作,对于不同的数据表examstudent和customers,会有不同的代码编写过程,利用反射和JDBC元数据可以编写通用的方法进行对不同数据表的查询. 在此之前我们是这样做的: 查询customers表中的字段以及字段值: 1 public Customer getCustomer(String sql, Object... args) { 2 Customer customer = null; 3 Connection connection = null; 4 Prepared

【转】JDBC学习笔记(5)——利用反射及JDBC元数据编写通用的查询方法

转自:http://www.cnblogs.com/ysw-go/ JDBC元数据 1)DatabaseMetaData /** * 了解即可:DatabaseMetaData是描述数据库的元数据对象 * 可以由Connection得到 */ 具体的应用代码: 1 @Test 2 public void testDatabaseMetaData(){ 3 Connection connection=null; 4 ResultSet resultSet=null; 5 try { 6 conne

firefox浏览器调用C++编写的ocx的方法

firefox浏览器调用C++编写的ocx的方法 在与硬件通讯或者和第三方控件通讯时,在BS架构中通常采用JS脚本调用OCX插件的方式来实现.这种方式在IE浏览器下可以使用,要求IE版本在6.0以上,11.0以下.OCX在调用之前,需要先注册,注册命令:regsvr32  ***.ocx:把OCX需要的DLL文件放在同一目录下.下面为一个示例代码: <HTML> <HEAD> <TITLE>MyActiveX</TITLE> </HEAD> &l

JDBC课程5--利用反射及JDBC元数据(ResultSetMetaData)编写通用的查询方法

/**-利用反射及JDBC元数据编写通用的查询方法 * 1.先利用SQl语句进行查询,得到结果集--> * 2.查找到结果集的别名:id--> * 3.利用反射创建实体类的对象,创建author对象--> * 4.获取结果集的列的别名: id,nation,name * 5.再获得结果集的每一列的值, * 结合2得到一个map键值对: 键: 列的别名,值: 列的值: {id=1,nation=中国,name=莫言} * 6.再利用反射为2的对应的属性赋值,属性为Map 的键,值为Map

javaWeb_JDBC_利用反射以及JDBC元数据编写通用的查询方法

JDBC利用反射以及元数据编写通用的查询方法[*****] 1.如何获取元数据 Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表, 表中的各个列,数据类型,触发器,存储过程等各方面的信息.根据这些信息,JDBC可以访问一个实现事先并不了解的数据库. 获取这些信息的方法都是在DatabaseMetaData类的对象上实现的,而DataBaseMetaData对象是在Connection对象上获得的. 2.元