当前位置:首页 » 电脑资讯 » 为什么一个文件被包含两次编译

为什么一个文件被包含两次编译

发布时间: 2022-09-09 07:36:51

❶ linux同一个软件包编译两次,第二次会覆盖第一次吗

不一定,如果make的话,一般源码没变化就不会重新编译,想要重新编译最好先把执行码和.o删除

❷ 头文件被多次包含是什么意思

头文件被多次包含是:如有一个大型程序,为了提高可读性,程序员是分多个文件编写,不会写在一个文件中的,这样的话程序员把每个文件都包含到主程序所在的文件中,不能多次包含,否则会出现编译出错!!!
但是库文件的话可以多次包含,因为库文件中预编译命令。预编译命令是看条件编译,如果条件成立编译,否则不编译,也就是你编译一个文件时已经编译过这个头文件,再编译另一个文件时不会再编译那条头文件。

❸ C++一个文件中含有两个预编译头文件的程序怎么写

防止重复包含的宏是在被调用的头文件内写的,而不是在调用的文件。你这么定义后,那两个被包含的头文件就失效了。

❹ 头文件被重复包含有什么坏处头文件被循环包含有什么坏处

有些头文件重复包含只是增加了编译工作的工作量,不会引起太大的问题,仅仅是编译效率低一些
有些头文件重复包含,会引起错误,比如在头文件中定义了全局变量(虽然这种方式不被推荐,但确实是C规范允许的)
如果头文件被循环包含的话,那就看你的编译器了
有的会智能处理,和只include一次一样
有的会报错
有的干脆死锁,导致编译程序崩溃(这个 只有很低级的编译器才会出 现在几乎看不到了)

不管怎样,用ifnde xxx #define xxx或者其他方式避免头文件重复包含,只有好处 没有坏处
是一个很好的习惯

❺ 在c/c++中如何避免头文件被多次包含

头文件的最开始
加入这条杂注,就能够保证头文件只被编译一次。
#pragma once是编译器相关的
,就是说即使这个编译系统上有效,但在其他编译系统也不一定可以,不过现在基本上已经是每个编译器都有这个杂注了。
#ifndef,#define,#endif是C/C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式具体写法方式一:#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__
... // 一些声明语句#endif方式二:#pragma once
... ... // 一些声明语句比较#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况
#pragma once则由编译器提供保证:同一个文件不会被包含多次。
注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件
。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,重复包含更容易被发现并修正。
方式一由语言支持所以移植性好,方式二 可以避免名字冲突
我还看到一种用法是把两者放在一起的:
#pragma once
#ifndef __SOMEFILE_H__
... ... // 一些声明语句#endif看起来似乎是想兼有两者的优点。

❻ 一个头文件被包含两次,而能通过编译,为什么

头文件中有头文件“守卫”,防止你多次包含的吧

❼ 一个头文件被同一个源文件多次包含,会发生什么情况

假如头文件里面没有加入
#ifndef GRAPHICS_H
#define GRAPHICS_H
。。。。。。。。//内容
#endif
,可能会导致内容的重新定义的错误

❽ 如何避免头文件被重复包含

#include文件的一个不利之处在于一个头文件可能会被多次包含,为了说明这种错误,考虑下面的代码:

#include "x.h"
#include "x.h"

显然,这里文件x.h被包含了两次,没有人会故意编写这样的代码。但是下面的代码:
#include "a.h"
#include "b.h"

看上去没什么问题。如果a.h和b.h都包含了一个头文件x.h。那么x.h在此也同样被包含了两次,只不过它的形式不是那么明显而已。

多重包含在绝大多数情况下出现在大型程序中,它往往需要使用很多头文件,因此要发现重复包含并不容易。要解决这个问题,我们可以使用条件编译。如果所有的头文件都像下面这样编写:
#ifndef _HEADERNAME_H
#define _HEADERNAME_H

...//(头文件内容)

#endif

那么多重包含的危险就被消除了。当头文件第一次被包含时,它被正常处理,符号_HEADERNAME_H被定义为1。如果头文件被再次包含,通过条件编译,它的内容被忽略。符号_HEADERNAME_H按照被包含头文件的文件名进行取名,以避免由于其他头文件使用相同的符号而引起的冲突。

但是,你必须记住预处理器仍将整个头文件读入,即使这个头文件所有内容将被忽略。由于这种处理将托慢编译速度,所以如果可能,应该避免出现多重包含。

❾ C++ 一个含有静态全局变量的头文件被包含多次

在对一个变量声明了static之后这个变量只能在当前文件中起作用了,你在头文件里面声明了,那么第一个包含这个头文件的源文件就是这个static变量的作用域了,第二个包含头文件的源文件就是这个变量的第二个作用域,当然也就不一样了。

至于你需要一个全局变量,你可以声明extern,但是要注意在头文件中只能声明,要在cpp文件中再定义一次。这样包含了这个头文件的源文件都能共享同一个全局变量了。不过c++最好的全局变量是类中static。

❿ C++ 中,包含一个有命名空间的文件两次会发生错误

你把一个全局变量的申明放到了头文件里面,你因该在a.cpp里面申明

namespacea
{
intaa;
}

然后在 a.h里面申明

namespacea{
externintaa;
}

并且a.cpp中不再include头文件a.h

热点内容
微信换完备注为什么不变开头 发布:2024-11-19 16:37:11 浏览:139
电脑为什么放不了歌和没声音 发布:2024-11-19 16:29:30 浏览:681
为什么微信语音能录音 发布:2024-11-19 16:17:47 浏览:312
为什么突然有线耳机连不上手机 发布:2024-11-19 16:17:04 浏览:715
晒太阳后的被子晚上为什么会变暖 发布:2024-11-19 16:14:33 浏览:717
为什么有段时间脾气特别差 发布:2024-11-19 15:59:13 浏览:631
为什么电脑自动删除英雄联盟 发布:2024-11-19 15:59:03 浏览:868
一个女生为什么要学复合 发布:2024-11-19 15:45:28 浏览:143
为什么考试前总觉得复习时间不够 发布:2024-11-19 15:39:26 浏览:772
火疖子脓没了光流血为什么不好 发布:2024-11-19 15:30:20 浏览:915