Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
定义指令是什么意思 我是C++新手。当我创建一个头文件Arme.h时,我会自动得到这些指令 #ifndef DEF_ARME #define DEF_ARME_C++_C_G++_Directive - Fatal编程技术网

定义指令是什么意思 我是C++新手。当我创建一个头文件Arme.h时,我会自动得到这些指令 #ifndef DEF_ARME #define DEF_ARME

定义指令是什么意思 我是C++新手。当我创建一个头文件Arme.h时,我会自动得到这些指令 #ifndef DEF_ARME #define DEF_ARME,c++,c,g++,directive,C++,C,G++,Directive,这些是什么意思?重要吗 #ifndef 表示:“如果未定义” 不言而喻:这里定义了“空宏”“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\u

这些是什么意思?重要吗

#ifndef 
表示:“如果未定义”

不言而喻:这里定义了“空宏”“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\u NAME”尚未定义,因此将定义它并包含头代码。如果以后包含相同的头,头名称将已经定义,因此下次不会包含相同的代码

注意:预处理器指令

#ifndef
是一个条件,并且(就像任何“if-then”构造一样)需要结束,在本例中为

#endif
\ifndef
=如果未定义

#define DEF_ARME 
定义

还回顾:

#include
=将命名文件的内容复制并粘贴到此处

因此,净效果是,代码如下:

#include "A.h"
#include "A.h"
第一个执行
#定义
,第二个则通过
#ifndef
拒绝插入同一文本的第二个副本

通常情况下,实际发生的情况更像:

#include "A.h"
#include "B.h"

/* but B.h says:

   #include "A.h"

*/

因此,您要避免的是编译器在包含依赖项的任何地方可能出现的双重声明错误,甚至有点复杂。

头保护所做的只是只允许包含一次头。如果它们被多次包含,它们就会被忽略。
因此,在头文件顶部定义它将确保它在程序中只包含一次。

这是头文件中常用的结构。为了防止#包含多个头文件,您将#ifndef和#定义特定于此头文件的“某物”。下次您尝试包含相同的标题时,您的“某物”将已定义并阻止包含


希望能有帮助

您可以通过以下宏在编译时设置源代码:

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);
 }
[附注]

  • 使用宏可以做很多事情,比如在定义了某个标记的情况下打开/关闭部分代码
  • 例如,您有游戏,在调试时需要一些调试图形,但在最终应用程序中不需要
  • 然后使用define。。。就像在pi.h示例中一样

不要忘记文件末尾的
#endif
!您的编辑器提供了令人烦恼的帮助XD不要忘记基本的
#endif
注意,您的示例名称无效,因为以下划线开头并后跟大写字母的标识符是为实现保留的,并且在客户端代码中使用它是非法的。好的,我修改了这一点。谢谢
// 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"