Asa*_*han 458 c c++ c-preprocessor
我一直在头文件的开头看到这样的代码:
#ifndef HEADERFILE_H
#define HEADERFILE_H
Run Code Online (Sandbox Code Playgroud)
并在文件的最后是
#endif
Run Code Online (Sandbox Code Playgroud)
这样做的目的是什么?
Lir*_*una 494
这些被称为#include警卫.
包含标头后,它会检查是否定义了唯一值(在本例中HEADERFILE_H).然后,如果未定义,则定义它并继续到页面的其余部分.
当再次包含代码时,第一个ifndef失败,导致空白文件.
这可以防止双重声明任何标识符,例如类型,枚举和静态变量.
Roy*_*Roy 32
#ifndef <token>
/* code */
#else
/* code to include if the token is defined */
#endif
Run Code Online (Sandbox Code Playgroud)
#ifndef检查给定标记是#defined在文件中还是在包含文件中更早; 如果没有,它包括它和关闭之间的代码#else,或者如果没有#else存在,#endif语句.#ifndef通常用于通过在包含文件后定义令牌并检查令牌未设置在该文件的顶部来使头文件具有幂等性.
#ifndef _INCL_GUARD
#define _INCL_GUARD
#endif
Run Code Online (Sandbox Code Playgroud)
小智 8
这可以防止多次包含相同的头文件.
#ifndef __COMMON_H__
#define __COMMON_H__
//header file content
#endif
Run Code Online (Sandbox Code Playgroud)
假设您已将此头文件包含在多个文件中.因此,第一次没有定义__COMMON_H__时,它将被定义并包含头文件.
下次定义__COMMON_H__时,它将不再包含.
小智 8
它们被称为 ifdef 或包含守卫。
如果编写一个小程序,似乎不需要它,但随着项目的增长,您可能会有意或无意地多次包含一个文件,这可能会导致编译警告,例如变量已声明。
#ifndef检查是否HEADERFILE_H未声明。
#define将声明HEADERFILE_H一次#ifndef生成 true。
#endif#ifndef就是要知道ie结尾的范围#ifndef。
如果没有声明,即生成true,则仅执行和#ifndef之间的部分,否则不执行。这将防止再次声明标识符、枚举、结构等......#ifndef#endif
| 归档时间: |
|
| 查看次数: |
389495 次 |
| 最近记录: |