内联函数、静态变量
时间:2010-09-06 来源:fishmwei
// 内联函数 静态变量
#include <stdio.h>
static int c = 0;
_inline void prints(int b, int *d);
int main(void)
{
static int b, d;
b = 0;
d = 0;
prints(b, &d);
prints(b, &d);
prints(b, &d);
return 0;
}
_inline void prints(int b,int *d)
{
static int a;
int i;
i = 0;
a++;
(*(&b))++;
c++;
(*d)++;
i++;
printf("a = %d b = %d c = %d d = %d i = %d\n", a, b, c, *d, i);
}
/*
输出结果:
a = 1 b = 1 c = 1 d = 1 i = 1
a = 2 b = 1 c = 2 d = 2 i = 1
a = 3 b = 1 c = 3 d = 3 i = 1
a = 4 b = 1 c = 4 d = 4 i = 1
*/
/*
从中可见,静态变量是在编译阶段就分配了内存。
多次调用内联函数,内联函数中的静态变量一直是用原来的那个地址空间,导致a持续增加。a在程序运行阶段一直存在着,而局部变量i则不然。
说内联函数就是define也不是,看编译器的处理,有时仅当普通函数处理,但有时类似define也不是define,如果直接用函数体内部代码代替函数调用,则会提示a重复定义。
另外 b和d区别仅在于按值传递和取地址传递。
还有一个就是静态变量初始化的话,值必须是确定的。
如: static int s = 12442;
而不能使用不定的值:
如: static int s = func(); func()函数返回一个整数或相关类型。
*/
#include <stdio.h>
static int c = 0;
_inline void prints(int b, int *d);
int main(void)
{
static int b, d;
b = 0;
d = 0;
prints(b, &d);
prints(b, &d);
prints(b, &d);
return 0;
}
_inline void prints(int b,int *d)
{
static int a;
int i;
i = 0;
a++;
(*(&b))++;
c++;
(*d)++;
i++;
printf("a = %d b = %d c = %d d = %d i = %d\n", a, b, c, *d, i);
}
/*
输出结果:
a = 1 b = 1 c = 1 d = 1 i = 1
a = 2 b = 1 c = 2 d = 2 i = 1
a = 3 b = 1 c = 3 d = 3 i = 1
a = 4 b = 1 c = 4 d = 4 i = 1
*/
/*
从中可见,静态变量是在编译阶段就分配了内存。
多次调用内联函数,内联函数中的静态变量一直是用原来的那个地址空间,导致a持续增加。a在程序运行阶段一直存在着,而局部变量i则不然。
说内联函数就是define也不是,看编译器的处理,有时仅当普通函数处理,但有时类似define也不是define,如果直接用函数体内部代码代替函数调用,则会提示a重复定义。
另外 b和d区别仅在于按值传递和取地址传递。
还有一个就是静态变量初始化的话,值必须是确定的。
如: static int s = 12442;
而不能使用不定的值:
如: static int s = func(); func()函数返回一个整数或相关类型。
*/
相关阅读 更多 +