Linux实现函数和全局变量的#ifdef功能
来源:互联网 发布:北京哪里体检好 知乎 编辑:程序博客网 时间:2024/06/11 03:05
大家都知道,我们可以用#ifdef来检测这个宏存在与否,分别在不同的处理,比如:
int main()
{
#ifdef __FOO
printf("Defined!\n");
#else
printf("Not defined");
#endif
return 0;
}
如果__FOO在前面定义了,那么就输出Defined!,否则就输出Not defined.
但如果是函数呢, 比如printf被定义了, 我就用printf来输出, 否则我就用myprintf来输出, 该怎么实现呢。
这里就介绍一个称为弱符号的方法,来实现这个功能。
先来看一段代码:
static void myprintf(const char* format, ...)
{
.....
}
int printf(const char *format, ...) __attribute__ ((weak));
int main()
{
if (printf)
printf("I am printf!\n");
else
myprintf("I am myprintf!\n");
return 0;
}
注意粗体部分是把printf声明成了一个弱符号,这样, 当标准库去掉printf后,
就会执行myprintf("I am myprintf!\n");
printf没被去掉的话,就执行printf("I am printf!\n");
如果函数后面没有加上__attribute__ ((weak))的话, 那么就是强符号,
强符号的函数就必须要实现, 否则在链接时会报"undefined reference to xxx",
全局变量也类似。
当然, 这个功能是在运行时实现的,而不是#ifdef那样, 是在编译时。
- Linux实现函数和全局变量的#ifdef功能
- python使用函数属性实现全局变量功能
- #ifdef、#else、#endif的运用---极为方便的全局变量的定义和声明
- 全局变量和函数的声明
- java中实现全局变量的功能
- linux下实现getch()函数的功能
- #ifdef OS_GLOBLES… 变量/函数的定义和声明
- 函数中“引用”全局变量和“修改”全局变量的差别
- 使用#ifdef _cplusplus 实现c 和 c++的混合编程
- static 和全局变量(函数)的exercise
- 关于全局变量和全局函数的声明
- jQuery的内部全局变量和构造函数
- #ifdef __cplusplus extern C的功能
- 递归函数 和 全局变量
- #if 和#ifdef的区别
- #ifdef和#if的差别
- ifdef和endif的理解
- #ifdef和#if的差别
- 吸血鬼数字
- JMVC里的宏
- OrCAD相关问题
- 脚本演示的天堂:共享一个可以提供代码示例和运行结果的非常不错的网站
- Linux+Apache+PHP+MYSQL环境配置学习笔记
- Linux实现函数和全局变量的#ifdef功能
- oracle数据操作
- MFC 基础(实例)
- windows mobile的3G连接,自动拨号问题?
- python实现 深度优先算法
- SEO真谛:转化率才是王道
- 关于延时打印的问题
- a星算法
- 开源的android项目