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

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

image

阅读 106
评论 5月23日提问
    1 个回答
    Yujiaao
    • 10.7k

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

    #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”,并且其中没有警卫, 编译器将无法完成编译预处理.

    评论 赞赏