FUNCTIONS.H中的"#ifndef FUNCTIONS_H"用于什么



在头文件functions.h中,前两个语句定义了FUNCTIONS_H(如果尚未定义(。有人能解释一下采取这种行动的原因吗?

#ifndef FUNCTIONS_H 
#define FUNCTIONS_H 
void print(); 
int factorial(int); 
int multiply(int, int); 
#endif 

您链接的文章根本不是关于Makefiles的,而是关于编译多源文件代码的。

这些所谓的人包括警卫。它们防止代码被不必要地多次包含。

如果未定义FUNCTIONS_H,则包括文件的内容并定义此宏。否则,它被定义为文件已经包含在内。

还有#pragma once也有同样的用途,虽然它不在标准中,但得到了许多主要编译器的支持。

例如:

接下来还有两个头文件——func1.hfunc2.h。两者内部都有#include "functions.h"

如果在main.cpp中我们这样做:

#include "func1.h"
#include "func2.h"
// rest of main...

代码将被预处理为:

#include "functions.h"
// rest of func1.h
#include "functions.h"
// rest of func2.h
// main...

然后:

#ifndef FUNCTIONS_H 
#define FUNCTIONS_H 
void print(); 
int factorial(int); 
int multiply(int, int); 
#endif 
// rest of func1.h

#ifndef FUNCTIONS_H 
#define FUNCTIONS_H 
void print(); 
int factorial(int); 
int multiply(int, int); 
#endif 
// rest of func2.h
// main...

正如您所看到的,如果不包含防护,函数的原型将第二次出现。也可能有其他关键的事情,重新定义会导致错误。

这是一个"包括防护";。如果头文件多次为#included,它将阻止重新定义。

这是一个C++的东西。它与makefile无关。

相关内容

  • 没有找到相关文章

最新更新