头文件,库文件,重复包含

//a.c

#include <stdio.h>
#include "a.h"
#include "b.h"
void main(void)
{
printf("safadf %d",i);
}
//a.c end
//a.h
#include "b.h"
//a.h end
//b.h
int i = 3;
//b.h end
/*本例中主程序在a.c中定义。
正常情况下,这三个文件都在同一目录下,进入该目录,然后执行
cc -c a.c表示编译a.c文件,编译的时候会把头文件中的内容都加载进来,在此例中,#include "a.h",而a.h中同样存在include,这时,a.h先把b.h中的内容:int i =3;加载进来,然后a.c在把a.h中的内容加载进来,所以a.c文件中的#include a.h最终被替换为为int i=3;等把全部的头文件加载进来以后,然后生成二进制格式的文件,这就是编译的过程。
编译过后本目录下就会出现a.o这个二进制文件,然后用命令cc -o a a.o
生成最终的可执行文件a,
*/

/*此例中,当执行cc -c a.c时,将所有的头文件都加载进来,主程序将变为
int i = 3;
int i = 3;
void main(void)
{
printf("safadf %d",i);
}
显然,i被重复定义了,所以编译会报错
*/

原文地址:https://www.cnblogs.com/saolv/p/9607302.html

时间: 2024-10-12 09:19:41

头文件,库文件,重复包含的相关文章

头文件被重复包含,嵌套包含的两层含义

http://www.cnblogs.com/bluestorm/archive/2011/11/04/2298126.html 说明: 写代码的时候头文件命名知道要加 #ifndef xxxx #define xxxx #endif 但是我把实现都放在了 .h文件中,然后出错了...所以头文件包含,只知其一不知其二,恩,就是所谓的 //a.h #ifndef _A_H_ #define _A_H_ int max(int a, int b) { return a > b ? a:b; } #e

【转载】防止变量重复定义、头文件重复包含、嵌套包含

[转自] http://hi.baidu.com/zengzhaonong/blog/item/8a8871062d481f7f03088106.html #include文件的一个不利之处在于一个头文件可能会被多次包含,为了说明这种错误,考虑下面的代码: #include "x.h"#include "x.h" 显然,这里文件x.h被包含了两次,没有人会故意编写这样的代码.但是下面的代码:#include "a.h"#include "

C/C++函数重复定义、头文件重复包含、互相包含问题

1.避免头文件重复包含 // test.h 此段宏的意思是如果定义了宏变量TEST_H_则不再定义它 #ifndef TEST_H_ #define TEST_H_ //头文件内容 #endif 或者 // test.h 告诉预编译器只包含一次 #pragma once 2.避免重复定义 不要将函数定义放置在头文件里面,正确的做法是头文件放置函数声明,源文件放置函数定义.因为源文件是分别编译的,假如头文件放置了函数定义,包含该头文件的每一个源文件都会定义相应的函数,从而导致重复定义.但是几种情况

C++ 头文件重复包含解决之道

我们在C/C++编程中,经常出现这种类型的错误:error: redefinition of 'struct student'或者error: previous definition of 'struct student'. 字面来看,指的是重新定义或者先前已定义.下面我将针对这一类型问题给出一套系统的解决方案,看了以下文章后,相信以后对于这种问题将会胸有成竹,对于程序的设计也更加合理. 开门见山,我讲给出一个具体的例子. 1.实例 struct.h struct student { char

cocos2d-x 扩充引擎基类功能 引起的头文件重复包含问题的分析

c++ 头文件包含 原因的分析:   c++  头文件的循环引用是指: .h 里面的里面的头文件的相互包含的,引起的重复引用的问题.cpp 里面包含头文件是不存在重复引用的问题(因为CPP没有#ifndef #define #endif 这个). 关键的原因是:#ifndef #define #endif 引起的.  翻译一下就是  如果没有定义 包含, 如果定义了 就不包含了. 由于 宏是全局唯一的,所以只会包含一次.这就是引起重复包含的原因.这些问题的解决办法:http://my.oschi

防止头文件的重复包含问题

在我们自己编写 C/C++的头文件时,可能会忽略一点:用一些处理机制来避免头文件的重复包含,因为头文件的内容在预编译时是把头文件的内容完全拷贝到引入的地方替换头文件的包含命令,而包含的头文件可能有包含很多内容,所以要是重复包含头文件,可能会使预编译后的源文件代码冗余量很大,造成空间上的浪费. 1. #pragma once 2. #ifndef #define #endif 它们具体实现如下: 假定此时要保证头文件HeadFile.h不会被重复包含,那么两种方法对应的方式如下: 1. #prag

头文件重复包含(转)

#include文件的一个不利之处在于一个头文件可能会被多次包含,为了说明这种错误,考虑下面的代码:#include "x.h"#include "x.h" 显然,这里文件x.h被包含了两次,没有人会故意编写这样的代码.但是下面的代码:#include "a.h"#include "b.h" 看上去没什么问题.如果a.h和b.h都包含了一个头文件x.h.那么x.h在此也同样被包含了两次,只不过它的形式不是那么明显而已. 多重包

#ifndef#define#endif防止头文件重复包含

#ifndef 主要目的:防止头文件的重复包含和编译. 如果在h文件中定义了全局变量,一个c文件包含同一个h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误:如果加了#ifndef,则不会出现这种错误. 1 #ifndef x //先测试x是否被宏定义过 2 #define x 3 程序段1 //如果x没有被宏定义过,定义x,并编译程序段 1 4 #endif 5 程序段2 //如果x已经定义过了则编译程序段2的语句,"忽视"程序段 1

两种解决头文件被重复包含方法的联系与区别

在制作C/C++项目的过程中,应该会遇到关于头文件被重复包含的问题,几乎每一个C/C++程序员都应该知道如何来解决这一问题.通常来说,我们通常可以用两种方式来解决这一问题. 第一种 ---- 利用以下形式: #ifndef  __XX_H__                                                                              #ifndef   XX_H #define __XX_H__                    

头文件重复包含

设想一种情形: 在c3.h中定义一个结构体类型,之前说过结构体类型.宏.类型重命名都是放到头文件里面的.当然放在源文件中也行,不过一般这些声明都是放在头文件中,这是一个规范!! 因为它本身就是一个类型,可能在很多文件中都会使用,所以这些东放在头文件里面,这样的话,在其他文件使用这个定义的时候,就直接包含头文件,就过去了. 继续设想的情形 在c3.h中定义一个结构体类型 使用这个结构体 接下来想在d3.c 中也使用c3.h中的这个结构体类型. 会不会想到一个问题? c3.h有一个struct C3