下一主题:,上一主题:,上一级:变更日志   [目录][索引]


6.8.4 有条件更改

源文件通常包含在构建时或静态条件下有条件的代码。例如,C 程序可以包含编译时的 #if 条件;用解释语言实现的程序可以包含模块导入或函数定义,这些导入或定义仅在特定版本的解释器中执行;而 Automake Makefile.am 文件可以包含变量定义或目标声明,这些变量定义或目标声明只有在配置时的 Automake 条件为真时才会被考虑。

许多更改也是有条件的:有时您会添加一个新的变量、函数,甚至是新的程序或库,它们完全依赖于构建时的条件。在变更日志中指明更改适用的条件很有用。

我们用来指明有条件更改的约定是用方括号括起来条件的名称

有条件更改可能发生在许多场景和多种变化中,因此这里有一些示例来帮助澄清。第一个示例描述了 C、Perl 和 Python 文件中的更改,这些更改是有条件的,但没有关联的函数或实体名称。

* xterm.c [SOLARIS2]: Include <string.h>.
* FilePath.pm [$^O eq 'VMS']: Import the VMS::Feature module.
* framework.py [sys.version_info < (2, 6)]: Make "with" statement
  available by importing it from __future__,
  to support also python 2.5.

为了简单起见,我们的其他示例将仅限于 C 语言,因为将它们改编为其他语言所需的细微更改应该是显而易见的。

接下来,这是一个描述完全有条件的新定义的条目:C 宏 FRAME_WINDOW_P 仅当定义了宏 HAVE_X_WINDOWS 时才被定义(和使用)。

* frame.h [HAVE_X_WINDOWS] (FRAME_WINDOW_P): Macro defined.

接下来,是一个函数 init_display 中的更改条目,其定义作为一个整体是无条件的,但更改本身包含在 ' #ifdef HAVE_LIBNCURSES ' 条件中。

* dispnew.c (init_display) [HAVE_LIBNCURSES]: If X, call tgetent.

最后,这是一个仅当某个宏定义时才生效的更改条目。

* host.c (gethostname) [!HAVE_SOCKETS]: Replace with winsock version.

下一主题:,上一主题:,上一级:变更日志   [目录][索引]