欢迎来到天天文库
浏览记录
ID:8967752
大小:16.05 KB
页数:4页
时间:2018-04-13
《c语言中头文件包含时变量重定义》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、防止变量重复定义;头文件重复包含、嵌套包含test-1.0使用#ifndef只是防止了头文件被重复包含(其实本例中只有一个头件,不会存在重复包含的问题),但是无法防止变量被重复定义。#vitest.c-------------------------------#include#include"test.h"externi;externvoidtest1();externvoidtest2();intmain(){ test1(); printf("ok"); test2();
2、 printf("%d",i); return0;}#vitest.h-------------------------------#ifndef_TEST_H_#define_TEST_H_charadd1[]="www.shellbox.cn";charadd2[]="www.scriptbox.cn";inti=10;voidtest1();voidtest2();#endif#vitest1.c-------------------------------#include3、h>#include"test.h"externcharadd1[];voidtest1(){ printf(add1);}#vitest2.c-------------------------------#include#include"test.h"externcharadd2[];externi;voidtest2(){ printf(add2); for(;i>0;i--) printf("%d-",i);}#Makefile--------------------4、-----------test: test.otest1.otest2.otest1.o:test1.ctest2.o:test2.cclean: rmtesttest.otest1.otest2.o错误:test-1.0编译后会出现"multipledefinitionof"错误。错误分析:由于工程中的每个.c文件都是独立的解释的,即使头文件有#ifndef_TEST_H_#define_TEST_H_....#enfif在其他文件中只要包含了global.h就会独立的解释,然后每个.c文件生成独立5、的标示符。在编译器链接时,就会将工程中所有的符号整合在一起,由于文件中有重名变量,于是就出现了重复定义的错误。解决方法在.c文件中声明变量,然后建一个头文件(.h文件)在所有的变量声明前加上extern,注意这里不要对变量进行的初始化。然后在其他需要使用全局变量的.c文件中包含.h文件。编译器会为.c生成目标文件,然后链接时,如果该.c文件使用了全局变量,链接器就会链接到此.c文件 。test-2.0#vitest.c-------------------------------#include6、.h>#include"test.h"inti=10;charadd1[]="www.shellbox.cn";charadd2[]="www.scriptbox.cn";externvoidtest1();externvoidtest2();intmain(){ test1(); printf("ok"); test2(); printf("%d",i); return0;}#vitest.h-------------------------------#ifndef_TEST_7、H_#define_TEST_H_externi;externcharadd1[];externcharadd2[];voidtest1();voidtest2();#endif#vitest1.c-------------------------------#include#include"test.h"voidtest1(){ printf(add1);}#vitest2.c-------------------------------#include#includ8、e"test.h"voidtest2(){ printf(add2); for(;i>0;i--) printf("%d-",i);}引用自:http://hi.baidu.com/zengzhaonong/item/2317e7207b04cb8f6f2cc379
3、h>#include"test.h"externcharadd1[];voidtest1(){ printf(add1);}#vitest2.c-------------------------------#include#include"test.h"externcharadd2[];externi;voidtest2(){ printf(add2); for(;i>0;i--) printf("%d-",i);}#Makefile--------------------
4、-----------test: test.otest1.otest2.otest1.o:test1.ctest2.o:test2.cclean: rmtesttest.otest1.otest2.o错误:test-1.0编译后会出现"multipledefinitionof"错误。错误分析:由于工程中的每个.c文件都是独立的解释的,即使头文件有#ifndef_TEST_H_#define_TEST_H_....#enfif在其他文件中只要包含了global.h就会独立的解释,然后每个.c文件生成独立
5、的标示符。在编译器链接时,就会将工程中所有的符号整合在一起,由于文件中有重名变量,于是就出现了重复定义的错误。解决方法在.c文件中声明变量,然后建一个头文件(.h文件)在所有的变量声明前加上extern,注意这里不要对变量进行的初始化。然后在其他需要使用全局变量的.c文件中包含.h文件。编译器会为.c生成目标文件,然后链接时,如果该.c文件使用了全局变量,链接器就会链接到此.c文件 。test-2.0#vitest.c-------------------------------#include6、.h>#include"test.h"inti=10;charadd1[]="www.shellbox.cn";charadd2[]="www.scriptbox.cn";externvoidtest1();externvoidtest2();intmain(){ test1(); printf("ok"); test2(); printf("%d",i); return0;}#vitest.h-------------------------------#ifndef_TEST_7、H_#define_TEST_H_externi;externcharadd1[];externcharadd2[];voidtest1();voidtest2();#endif#vitest1.c-------------------------------#include#include"test.h"voidtest1(){ printf(add1);}#vitest2.c-------------------------------#include#includ8、e"test.h"voidtest2(){ printf(add2); for(;i>0;i--) printf("%d-",i);}引用自:http://hi.baidu.com/zengzhaonong/item/2317e7207b04cb8f6f2cc379
6、.h>#include"test.h"inti=10;charadd1[]="www.shellbox.cn";charadd2[]="www.scriptbox.cn";externvoidtest1();externvoidtest2();intmain(){ test1(); printf("ok"); test2(); printf("%d",i); return0;}#vitest.h-------------------------------#ifndef_TEST_
7、H_#define_TEST_H_externi;externcharadd1[];externcharadd2[];voidtest1();voidtest2();#endif#vitest1.c-------------------------------#include#include"test.h"voidtest1(){ printf(add1);}#vitest2.c-------------------------------#include#includ
8、e"test.h"voidtest2(){ printf(add2); for(;i>0;i--) printf("%d-",i);}引用自:http://hi.baidu.com/zengzhaonong/item/2317e7207b04cb8f6f2cc379
此文档下载收益归作者所有