URN Logo
UNIX Resources » Linux » China Linux Forum » C/C++编程版 » 40 » 头文件中的一个问题
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  TI专版
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
头文件中的一个问题
头文件中的一个问题 - czijian [2005-02-25 16:27 | 1,643 byte(s)]
 
Re: 头文件中的一个问题 - Atu [2005-02-25 17:14 | 721 byte(s)]
 
Subject: 头文件中的一个问题
Author: czijian    Posted: 2005-02-25 16:27    Length: 1,643 byte(s)
[Original] [Print] [Top]
我在实际的项目中用到了一些全局变量,总让我不踏实。这些变量主要是在头文件中给出的
下面是个例子。
//file.h
1
2
3 int whole;
4 typedef struct
5 {
6 int a;
7 char b;
8 } struct_s;
9
10 void f(struct_s*);

//file1.h
1 #include <stdio.h>
2 #include "file.h"
3
4 int main()
5 {
6 struct_s a={1,'a'};
7 struct_s* ptr=&a;
8
9 f(ptr);
10 printf("the whole's value is %d ",whole);
11 return 0;
12 }

//file2.h
1 #include <stdio.h>
2 #include "file.h"
3
4 //whole=2;
5
6 void f(struct_s* ptr)
7 {
8 whole=2;
9 printf("the struct's value is %d and %c ",ptr->a,ptr->b);
10 return;
11 }

看我的file.h的第3行,我定义了一个whole(应该不能算是声明吧)。
而file1.h和file2.h都包含了这个whole,那么怎么不会出现重复定义的警告,
编译都通过,而且工作的很好。这个全局变量让我很不舒服,我的希望是不要
在头文件中出现这种变量的定义,但是多个文件又要同时访问这个变量。希望
大家给我这个井底之蛙指点。
[Original] [Print] [Top]
Subject: Re: 头文件中的一个问题
Author: Atu    Posted: 2005-02-25 17:14    Length: 721 byte(s)
[Original] [Print] [Top]
为什么不会出现重复定义的错误,我暂时说不清楚。
可以参考一下<<C/C++深层探索>>这本书,它详细讨论了C中声明和定义的关系。
而且也讨论了你的这种情况。
大概意思是:声明和定义在某种情况下可以自动转换。

如果你用C++编译,就错了了: multiple definition of `whole'
而C就可以。

给你一个建议吧:
在a.h中写成
extern int whole;
它将作为一个声明,在每个你要使用这个变量的文件里面#include "a.h"
声明可以重复。

在一个合适的文件(.c或.cc)里,写
int whole;

这样应该就对了。

试试吧




[Original] [Print] [Top]
« Previous thread
进程问题?(郁闷中)
C/C++编程版
40
Next thread »
popen时怎么达到ctrl + d的效果
     

Copyright © 2007~2009 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
webmaster: webmaster@unixresources.net
This page created on 2009-09-07 16:44:05, cost 0.135252952576 ms.