Chinaunix
标题:
平台设备资源获取源码分析之疑问
[打印本页]
作者:
xiaoxi5202
时间:
2013-07-18 16:47
标题:
平台设备资源获取源码分析之疑问
今天学习平台设备驱动时,查看内核获取资源函数的源代码如下/drivers/base/platform.c:
struct resource *platform_get_resource(struct platform_device *dev,
unsigned int type, unsigned int num)
{
int i;
for (i = 0; i < dev->num_resources; i++) {
struct resource *r = &dev->resource
;
if (type == resource_type(r) && num-- == 0)
return r;
}
return NULL;
}
如上红色标记部分,不明白为什么在for()循环内部来创建指针变量,这样若有多次循环的话,就会重复创建同样的变量了?是不是应该改为:
struct resource *platform_get_resource(struct platform_device *dev,
unsigned int type, unsigned int num)
{
int i;
struct resource *r;
for (i = 0; i < dev->num_resources; i++) {
r = &dev->resource
;
if (type == resource_type(r) && num-- == 0)
return r;
}
return NULL;
}
作者:
xiaoxi5202
时间:
2013-08-21 11:23
没人回帖,我自己顶一下!
我自己写了一个测试程序如下:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i,j;
unsigned char value = 10;
for(i = 0;i < 50;i++)
{
unsigned char temp = value;
printf("%d temp = %ud ",i,temp);
printf("%d &temp = %ud\n",i,&temp);
}
for(j = 0;j < 50;j++)
{
unsigned char temp = value;
printf("%d temp = %ud ",j,temp);
printf("%d &temp = %ud\n",j,&temp);
}
}
编译通过,且运行结果为:
0 temp = 10d 0 &temp = 3218612227d
1 temp = 10d 1 &temp = 3218612227d
2 temp = 10d 2 &temp = 3218612227d
3 temp = 10d 3 &temp = 3218612227d
4 temp = 10d 4 &temp = 3218612227d
5 temp = 10d 5 &temp = 3218612227d
6 temp = 10d 6 &temp = 3218612227d
7 temp = 10d 7 &temp = 3218612227d
8 temp = 10d 8 &temp = 3218612227d
9 temp = 10d 9 &temp = 3218612227d
10 temp = 10d 10 &temp = 3218612227d
11 temp = 10d 11 &temp = 3218612227d
12 temp = 10d 12 &temp = 3218612227d
。。。。。。。。。。。。。。。。。。。。。。。。
0 temp = 10d 0 &temp = 3218612226d
1 temp = 10d 1 &temp = 3218612226d
2 temp = 10d 2 &temp = 3218612226d
3 temp = 10d 3 &temp = 3218612226d
4 temp = 10d 4 &temp = 3218612226d
5 temp = 10d 5 &temp = 3218612226d
6 temp = 10d 6 &temp = 3218612226d
7 temp = 10d 7 &temp = 3218612226d
8 temp = 10d 8 &temp = 3218612226d
9 temp = 10d 9 &temp = 3218612226d
10 temp = 10d 10 &temp = 3218612226d
11 temp = 10d 11 &temp = 3218612226d
12 temp = 10d 12 &temp = 3218612226d
。。。。。。。。。。。。。。。。。。。。。。。。
相信看运行结果,大家已经清楚为什么了。详细可以去看一下GNU C标准。
说说这样写的好处:作用范围只在{}之内,使代码更加清晰。因为不需要将所有的局部变量全部定义在函数的开头;若函数太长时,这样写阅读代码时更加方便;
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2