关于头文件中为何要用static
来源:互联网 发布:代办淘宝入驻中国制造 编辑:程序博客网 时间:2024/05/23 13:02
static在头文件中使用的意义:
举个例子:
#ifndef __debug_h
#define __debug_h
#include <sys/types.h>
#include <syslog.h>
#include <stdarg.h>
#include <stdio.h>
static int __verbose = 0;
#define __have___verbose 1
static int __daemon = 0; /* is program daemon? */
#define __have___daemon 1
static int __debug = 0;
#define __have___debug 1
#ifdef __cplusplus
extern "C"{
#endif
static void _debug(const char* fmt, ...)
{
va_list arg;
char buf[8192];
va_start(arg,fmt);
vsnprintf(buf,8192,fmt,arg);
#ifdef DEBUG
if(__daemon){
syslog(LOG_DEBUG|LOG_USER,buf);
}else{
fputs(buf,stdout);
}
#endif
}
static void _verbose(const char* fmt,...)
{
va_list arg;
char buf[8192];
if(!__verbose)
return;
va_start(arg,fmt);
vsnprintf(buf,8192,fmt,arg);
if(__daemon){
syslog(LOG_DEBUG|LOG_USER,buf);
}else{
fputs(buf,stdout);
}
}
#ifdef __cplusplus
}
#endif
#endif
为何上面的都用static 来修饰呢?
如果没有static
当有两个文件a.c 和 b.c
如果a.c b.c都用到了debug.h
那么
debug.h + a.c ===> a.o
debug.h + b.c ===> b.o
gcc a.o b.o -o target
时,a.o和b.o中都同时有__debug,__daemon,__verbose,和_debug,_verbose
的定义,所以链接的时候就回出现multi-definition,为了避免这个
用static声明后,即使有同名的函数或变量出现,但由于static的局部性
不会影响到其他到模块,所以这就很好的避免了上面的multi definition的问题
- 关于头文件中为何要用static
- 关于Vc2005中头文件的static const int问题
- 关于头文件中的 static inline函数
- 关于头文件中的 static inline函数
- 关于头文件中的 static inline函数
- 关于头文件中的 static inline函数
- 转贴:模板的声明和实现为何要放在头文件中?
- 模板的声明和实现为何要放在头文件中?
- 模板的声明和实现为何要放在头文件中?
- 读《模板的声明和实现为何要放在头文件中?》有感
- 模板的声明和实现为何要放在头文件中?
- 模板的声明和实现为何要放在头文件中?
- 模板的声明和实现为何要放在头文件中?
- 模板的声明和实现为何要放在头文件中?
- 模板的声明和实现为何要放在头文件中?
- 模板的声明和实现为何要放在头文件中?
- 模板的声明和实现为何要放在头文件中?
- 头文件中定义static静态变量的利弊
- 添加自动注册GAC和重启应用程序池的脚本文件
- 2009年IT十大争议人物四:张汝京
- 气质的培养(哈佛管理世界)
- URL Encoding/Decoding in C
- 超级简单:使用FOR XML AUTO控制XML输出(译转)
- 关于头文件中为何要用static
- PHP网上花店管理系统
- 程序员这份工作给我带来的改变
- 2009年IT十大争议人物五:丁磊
- 谈技术人员职业之路的选择(二)
- DataSet 中的 Relations 属性
- 惊!北大青鸟落户学府大道!
- 建立了IT咨询师架构师Google群
- (VBA)excel单元格中查找特殊值