2014-10-03 58 views

回答

5

它还定义了一个宏,被替换为无。

例如在标头警卫的情况下。

在这种情况下,我们只需要知道后卫宏是否已被定义 - 我们可以检查与#ifdef#ifndef。它不需要被定义为任何东西,所以我们通常不会打扰任何事情。这给出了后卫的通常形式

#ifndef HEADER_H // check whether it's defined, skip to "endif" if so 
#define HEADER_H // define it; doesn't need to contain anything 

// header contents 

#endif    // skip to here (end of header) if already defined 

因此,包括它一次将包括内容和定义宏;包括它第二次会无害地跳过内容,而不是重复它们,(可能)导致错误。

2

它定义了指定的标识符字面意思没有。就那么简单。

1

它定义了一个空的宏。在代码中遇到该宏词时,它将被替换为无。

这并不完全没有用,因为仍然可以用#ifdef检测宏。它通常用于提供不同代码段的可选编译。

当用作包含警卫(使用#ifndef)时,它将防止在单个源文件中多次处理标题。

3

这种类型的宏没有任何替代。

#define FOO 

这是当宏仅用于测试是否存在有用:

#ifdef FOO 

#if defined(FOO)