下一項:,上一項:,上一層:變更日誌   [目錄][索引]


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.

下一項:,上一項:,上一層:變更日誌   [目錄][索引]