在Apple的开源网站上,entry for stdarg.h包含以下内容:
#ifndef _STDARG_H
#ifndef _ANSI_STDARG_H_
#ifndef __need___va_list
#define _STDARG_H
#define _ANSI_STDARG_H_
#endif /* not __need___va_list */
#undef __need___va_list
如果第一个参数后面没有任何内容,那么#define语句会做什么?
答案 0 :(得分:5)
有三种可能的"值"对于预处理器中的标识符:
第二个,已定义但为空,通常用于条件编译,其中测试仅用于标识符的定义,而不是值:
#ifdef __cplusplus
// here we know we are C++, and we do not care about which version
#endif
#if __cplusplus >= 199711L
// here we know we have a specific version or later
#endif
#ifndef __cplusplus // or #if !defined(__cplusplus)
// here we know we are not C++
#endif
这是一个带有名称的示例,如果定义了该名称将具有值。但是还有其他的,比如NDEBUG,它们通常根本没有定义任何值(通常在编译器命令行上-DNDEBUG
)。
答案 1 :(得分:1)
他们定义了一个扩展为空的宏。如果你打算将它用作宏,它就没有用,但是当它与#ifdef
和朋友结合使用时非常有用 - 例如,你可以用它来创建一个包含守卫,所以当你{{1一个文件多次,受保护的内容只包含一次。
答案 2 :(得分:1)
您定义的内容如下:
#define _ANSI_STDARG_H_
以便稍后您可以查看:
#ifdef _ANSI_STDARG_H_