c重复引用头文件会怎么样,C语言一个关于头文件重复定义的问题

1,C语言一个关于头文件重复定义的问题1、 int c; 这个算是定义 , 不是声明 , 在编译期间不会有问题,链接的时候会重定义,应该在头文件中 extern int c;在.c文件中int c;这样就不会出现重定义的问题了 , 你好好研究下定义跟声明,编译跟链接 。2、中间能包含一些特殊的定义,类定义 , 和inline函数定义等等,int c;这个算是定义,不是声明 , extern int c;这个算是声明 。。。
2,c语言 头文件中放函数实体 两个c文件同时引用会报错找到一个或多C语言头文件中一般只进行函数声明 , 函数实现一般另写在文件中,这样引用头文件就不会报重复定义了 。你的两个c文件在一个工程中,同时引用你定义的那种,在编译时,两个c文件都会将这段代码(头文件中的)展开到你的c文件中 , 因此,会报重复定义解决办法是,把你的头文件的开头加入:#ifndef XXX_H#define XXX_H头文件的结尾加入:#endif这里XXX可以是任意的 , 一般是用头文件的名称 。1、是不是加入大程序时,没有引用那个头文件;2、加入的程序,什么变量或函数与大程序的变量或函数同名?补充:3、加入的函数在文件开头没有声明?【c重复引用头文件会怎么样,C语言一个关于头文件重复定义的问题】
3,C include 同一个头文件2遍有什么后果如果是你自己编写的头文件 , 那么如果没加唯一包含标识的话,那么编译器会编译报错的 。如果是系统自带的头文件,由于其每个头文件都加了特殊标识,所以即使你包含两遍,也不会有问题 。不能这么用sizeof表示的是a[]的字节数你要是想知道a 的长度可以每次输入的时候为一个数加一如果头文件里有某些函数或类的定义,多次包含同一个头文件,将导致重复定义,编译器将捕获这种错误 。而往往会在不知不觉中包含同一个头文件多次,为了避免出现重复定义,应该使用#ifnde#define 头文件内容 #endif,这样将只定义一次 。不能这么用sizeof表示的是a[]的字节数你要是想知道a 的长度可以每次输入的时候为一个数加一可以把include 理解为 "把目标文件内容复制到这个位置". 你觉得include多次会发生什么?include多次不影响是因为头文件中加了一组宏, 最好能自己理解一下这组宏的意思.另外不推荐使用#pragma once, 因为这个好像只在VS中起作用.
4,这个问题C语言一个关于头文件重复定义的问题1.是链接出错吧不知道你有没有手工编写过makefile这么说吧C语言的编译过程分为编译和链接编译之前有一个预处理编译的最小单位是单个文件也就说预处理的最小单位也是单个文件假设工程中有 a.cb.c两个文件 都包含了globle.h那么对a编译的时候, globle只包含一次 生成的 a.o 中包含了 a_s32 b_s32(即你定义的变量)对b编译的时候同样会包含globle.h 而且只包含一次所谓只包含一次 是在单个c/cpp文件中只包含一次这样在object中就会有多个相同命名的变量被包含进去链接的时候就会出错出错不会出现在编译过程中的2.可以包含任何语句不要这样定义全局变量,这样当然错 , ,使得所有的 。c文件编译出来都包含这几个变量的实体,正确的做法,是在 。c文件中定义实体,在 。h文件中 使用externinta;这样的语句来引用它 。#define_GLOBLE_H这句没写完整吧你可以再定义一个头文件globle2.h里面写:extern int a;extern int b;extern int c;其它文件需要调用的地方全部都调用globle2.h1、 intc;这个算是定义,不是声明,在编译期间不会有问题,链接的时候会重定义,应该在头文件中 extern int c;在.c文件中int c;这样就不会出现重定义的问题了,你好好研究下定义跟声明 , 编译跟链接 。2、中间能包含一些特殊的定义,类定义 , 和inline函数定义等等,int c;这个算是定义,不是声明 , extern int c;这个算是声明 。。。5,C中两个头文件互相引用怎么办两个头文件相互包含会导致超前引用的问题,所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数,发生这种情况是无法编译通过的,不过可以采取一些手段解决该问题 。超前引用导致的错误有以下处理办法:使用类声明,在超前引用一个类之前,首先用一个特殊的语句说明该标识符是一个类名 , 即将被超前引用 。扩展资料:头文件:1、头文件开头处的版权和版本声明;2、预处理块;3、nline函数的定义;4、函数和类结构声明等 。在头文件中,用 ifndef/define/endif结构产生预处理块,用 #include 格式来引用库的头文件 。头文件的这种结构,是利用C语言进行开发软件所通常具备的,属于公有知识 。参考资料来源:百度百科-头文件两个头文件相互包含会导致超前引用的问题,所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数 。发生这种情况是无法编译通过的,不过可以采取一些手段解决该问题超前引用导致的错误有以下几种处理办法:1) 使用类声明在超前引用一个类之前,首先用一个特殊的语句说明该标识符是一个类名,即将被超前引用 。其使用方法是:a)用class ClassB;声明即将超前引用的类名b)定义class ClassAc)定义class ClassB;d)编制两个类的实现代码 。上述方法适用于所有代码在同一个文件中,一般情况下 , ClassA和ClassB分别有自己的头文件和cpp文件 , 这种方法需要演变成:a) 分别定义ClassA和ClassB,并在cpp文件中实现之b) 在两个头文件的开头分别用class ClassB;和class ClassA;声明对方c) 在两个cpp文件中分别包含另外一个类的头文件NOTE:这种方法切记不可使用类名来定义变量和函数的变量参数,只可用来定义引用或者指针 。2) 使用全局变量由于全局变量可以避免超前引用,不用赘述 。我的习惯是,把类对象的extern语句加在该类头文件的最后,大家喜欢怎样写那都没有什么大问题,关键是保证不要在头文件中胡乱包含 。3) 使用基类指针 。这种方法是在引用超前引用类的地方一律用基类指针 。而一般情况下 , 两个互相引用的类并不涉及其基类,因此不会造成超前引用 。不需要这么包含,除非必要如果你只是想在另外一个类中定义一个类的成员变量,只要在头文件中加入 class 类名;然后要在.cpp文件中包含这个头文件就可以了第二种解决方案:加入宏定义#ifndef __A_H__#define __A_H__class b;class a ...}#endifb.h#ifndef __B_H__#define __B_H__class a;class b ...}#endif你在最开始加一句#pragma once试试,如果你的编译器支持的话 。不支持就按楼上几位说的做就行了 。这是因为头文件只能包含一次,可以用宏定义来解决这个问题 。在你的line和point两个.h文件中分别加入下面的代码://line.h#ifndef _line_h#define _line_h// 你自己的代码#endif//---------------------------------------------// point.h#ifndef _point_h#define _point_h// 你自己的代码#endif其次,如果是vc,在这两个头文件最开头加#pragma once也能达到同样效果 。谢谢,望采纳 。通常是设置个与文件名相对应的"标志",在a.h的所有内容用以下形式围起来:#ifndef _A_H#define _A_H 1<内容>...#endifb.h就改成 _B_H确保已包含过的东西不会重复定义 。

    推荐阅读