#ifndef 和 #define以及#endif 是C/C++中的预处理指令,用于防止头文件(header file)被重复包含(inclusion)导致的编译错误。这种技术通常被称为“头文件保护”或“包含卫士”(Include Guards)。
通俗理解
通俗的方式来解释#ifndef SSH_H、#define SSH_H和#endif这组预处理指令。
想象一下你正在写一个故事书,这本书里有很多章节,每个章节都描述了不同的场景和角色。但是,你不想让读者重复读到同一个章节的内容,因为这会让故事变得无聊和混乱。
在编程中,头文件(header file)就像是这些章节,它们包含了函数声明、变量定义、宏定义等“故事元素”。当你编写一个大型项目时,可能会在不同的文件中多次包含同一个头文件,这就像是让读者多次读同一个章节一样,会导致问题。
现在,#ifndef SSH_H、#define SSH_H和#endif就像是你在书中的一个特殊标记,用来确保读者(或编译器)不会重复读到同一个章节(或头文件的内容)。
-
#ifndef SSH_H:这就像是你在章节开始处放了一个标记,上面写着“如果读者还没读过这个章节(即SSH_H这个标记还没被定义),那就让他继续读下去”。 -
#define SSH_H:这表示你已经让读者开始读这个章节了,并且为了防止他再次读到这个章节,你在这章的开头放了一个“已读”标记(即定义了SSH_H)。 -
#endif:这表示章节的结束,以及“已读”标记的范围。从#ifndef到#endif之间的内容,只有在章节还没被读过(即SSH_H还没被定义)时,读者才会读到。
所以,当你在编程中看到这样的代码时,就可以理解为:“如果SSH_H这个标记还没被定义(即这个头文件还没被包含过),那么就定义它,并包含这个头文件的内容;如果已经定义过了(即已经包含过了),那么就跳过这部分内容,避免重复包含。”
这样,就可以确保你的项目中每个头文件只被包含一次,避免了重复定义和编译错误。
具体定义
1.#ifndef SSH_H
这行代码的意思是“如果没有定义SSH_H”。#ifndef 是预处理指令 if not defined 的缩写。它检查宏(macro)SSH_H 是否已经定义。如果 SSH_H 没有被定义,那么编译器就会执行紧接着 #ifndef 和 #endif 之间的代码。
2.#define SSH_H
这行代码定义了宏 SSH_H。如果 #ifndef SSH_H 的条件为真(即 SSH_H 没有被定义),那么这行代码就会被执行,SSH_H 宏就会被定义。这样,如果再次包含这个头文件,#ifndef SSH_H 的条件就会为假(因为 SSH_H 已经被定义了),从而避免了头文件内容的重复包含。
3.#endif
这行代码标记了 #ifndef 条件块的结束。它告诉编译器结束检查条件,并继续处理后面的代码。





![[python][Anaconda]使用jupyter打开F盘或其他盘文件](https://img-blog.csdnimg.cn/direct/fbe92607f013438c93f549d39c313974.png)












