开发者社区> 问答> 正文

为什么C/C++的预处理指令#include不自动让所包含的文件只包含一次?

在C/C++中#include所包含的头文件里面必须显式声明

#ifndef __HEADER_H_DEFINE__
#define __HEADER_H_DEFINE__

#endif
或者有些编译器支持

#pragma once

编译器完全有能力在执行预处理指令#include时使同一个文件只包含一次,但是却没有这么做,为什么?是否有需要包含同一个文件超过一次的情况?

展开
收起
a123456678 2016-06-06 11:20:10 2295 0
1 条回答
写回答
取消 提交回答
  • 1、C/C++ 的函数和变量都可以重复声明。条件判断是为了防止不必要的函数被声明,从而造成冲突。

    他是为了避免重复编译,而不是解决重复声明。

    2、#pragma once 同一个文件不会被编译多次。注意这里所说的 同一个文件 是指物理上的一个文件,而不是指内容相同的两个文件。

    C/C++ 没有 Java 那种每个类对应一个文件的规定,所以即使使用了 #pragma once 也应该在头文件里面加上条件判断。

    2019-07-17 19:27:59
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载