c 头文件为什么要加#ifndef呢

是为了防止重复声明吗?
但是重复声明在编译也不会报错的啊?

image

阅读 1.8k
1 个回答

条件编译有几种典型的使用场景.
如增加代码的移植性,根据不同的条件(环境变量,编译参数等),编译出不同平台的代码,如:

#ifdef __linux__ 
    //linux code goes here
#elif _WIN32
    // windows code goes here
#else

#endif

另一种典型的情况,
通常在头文件的开头看到这样的代码:

#ifndef HEADERFILE_H
#define HEADERFILE_H

并且在文件末尾是

#endif

这些被称为#include守护

包含标头后,它将检查是否定义了唯一值(在这种情况下为HEADERFILE_H)。然后,如果未定义,则定义它并继续到页面的其余部分。

当再次包含该代码时,第一个ifndef失败,从而导致文件空白。

这样可以防止对任何标识符(例如类型,枚举和静态变量)进行双重声明。

它还可以防止递归包含...想象一下“ alice.h”包括“ bob.h”,“ bob.h”包括“ alice.h”,并且其中没有警卫, 编译器将无法完成编译预处理.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进