#ifndef #define 指令是什么意思
what does mean #ifndef #define directive
我是 c++ 的新手。当我创建一个头文件 Arme.h 时,我会自动收到这些指令
#ifndef DEF_ARME
#define DEF_ARME
这些是什么意思,重要吗?
#ifndef
意思是:"如果未定义"
#define DEF_ARME
不言自明:这里定义了"空宏"DEF_ARME"。我们可以在头文件中经常看到这种构造:您的整个头文件将包含在这些文件中:
#ifndef HEADER_NAME
#define HEADER_NAME
(here the code you want to include only once, as is general the case for headers)
#endif
这样:第一次包含头文件时,宏"HEADER_NAME"尚未定义,因此将定义它并包含标头代码。如果稍后包含相同的标头,则HEADER_NAME将已经定义,因此不会再包含相同的代码。
注意:预处理器指令
#ifndef
是一个条件,(就像任何"如果那么"构造一样)需要结束,在这种情况下
#endif
#ifndef
= 如果未定义
#define
= 定义
还记得:
#include
= 表现得好像命名文件的内容已复制并粘贴到此处
因此,净效果是使用如下代码:
#include "A.h"
#include "A.h"
第一个执行#define
,然后第二个拒绝插入同一文本的第二个副本,因为#ifndef
。
通常,否则实际发生的情况更像是:
#include "A.h"
#include "B.h"
/* but B.h says:
#include "A.h"
*/
因此,您要避免的是编译器在包含依赖项的任何位置的潜在双重声明错误甚至稍微复杂。
标头保护所做的只是只允许包含一次标头。如果多次包含它们,则只会忽略它们。因此,在头文件的顶部定义它将确保它只包含在程序中一次。
它是头文件中常用的构造。为了防止 #including 多个头文件,你放置 #ifndef 并 #define 特定于此头文件的"某些东西"。下次您尝试包含相同的标头时,您的"某些内容"将已经定义并阻止包含。
希望对您有所帮助。
您可以通过以下宏在编译时设置源代码,例如:
1.使用指定的函数版本
int factorial1(int n)
{
if (n<=1) return 1;
return n*factorial1(n-1);
}
int factorial2(int n)
{
int f,i;
for (f=1,i=2;i<=n;i++) f*=i;
return f;
}
#define factorial(n) factorial1(n)
//#define factorial(n) factorial2(n)
void main()
{
int i=factorial(10);
}
2.避免多次包含(如果您有全局变量,则很好)
// this will avoid text below if _pi_h is already defined ... ie pi.h is already included
#ifndef _pi_h
// this will define global token _pi_h which means that file pi.h is already included
#define _pi_h
// global viariable
double pi=3.1415926535897932384626433832795;
// end of ifndef
#endif
// now you can do this without error (very handy for nested includes...)
#include "pi.h"
#include "pi.h"
#include "pi.h"
[注释]
- 使用宏可以做很多事情,例如如果定义了某些标记,则打开/关闭代码的某些部分
- 例如,你有游戏,想要在调试时有一些调试绘图,但不是在最终应用程序中
- 然后只需使用定义...就像在 pi.h 示例中一样
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 当我们说在执行程序时将操作系统的控制权传递给main()函数时,我们的意思是什么
- 这句话在c++中的意思是什么
- 这个typedef的意思是什么
- 这句话的意思是什么
- 意思是什么
- 这个句法的意思是什么?