1. 宏和函数的选择实际上是时间和空间的的权衡。

  宏生成内联代码,即在程序中生成语句。如果调用 20次宏,即在程序中插入20行代码。如果调用函数20次,程序中只有一份函数语句的副本,所以节省了空间。但是,程序的控制必须跳转至函数内,随后再返回主调程序,这显然要比内联代码药费更多的时间。

  • 宏不用担心变量类型。这是因为宏处理的是字符串,而不是实际的值。
  • 对于简单的函数,程序员通常使用宏。
1 #define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) 
2 #define ABS(X) ((X) < 0 ? -(X) : (X))
3 #define ISSIGN(x) ((x) == 'x' || (x) == '-' ? 1 : 0) 
  • 宏名中不允许有空格,但是在替换字符串中可以有空格。
  • 用 () 把宏的参数和替换体括起来。避免宏展开出错。
  • 用大写字母表示宏函数名称。该惯例不如用大写字母表示宏常量广泛。但是,大写字母可以提醒程序员宏有可能产生副作用。
  • 如果打算使用宏来加快程序的运行速度,那么首先要确定使用宏和使用函数是否有较大差异。在程序中只使用一次的宏是无法明显减少程序的运行时间的。在循环嵌套中使用宏更有助于提高效率。

2. 文件包含 #include

1 #include <stdio.h>            // 查找系统目录
2 #include "hot.h"        // 查找当前工件目录
3 #include "/usr/biff/p.h"    //查找 /usr/biff 目录

在大部分情况下,头文件的内容是编译器生成最终代码时所需的信息,而不是添加到最终代码中的材料。