2016-02-26 56 views
-3

虽然我正在查看Linux设备驱动程序代码,我发现下面的代码,我不明白为什么他们提到像静态结构。结构和静态结构有什么区别?

static struct resource imx_uart1_resources[] = { 
[0] = { 
    .start = 0x00206000, 
    .end = 0x002060FF, 
    .flags = IORESOURCE_MEM, 
    }, 
[1] = { 
.start = (UART1_MINT_RX), 
.end = (UART1_MINT_RX), 
.flags = IORESOURCE_IRQ, 
    }, 
}; 

任何人都可以解释什么是“静态结构”的需要,并解释它的必要性?

+1

有很多关于静态方法的其他例子。至于为什么有必要,你没有显示足够的代码给任何人给你一个答案。 – Joe

+3

可能重复[什么是“静态”在C程序中的意思?](http://stackoverflow.com/questions/572547/what-does-static-mean-in-a-c-program) – Joe

+0

没有@Joe。我的问题是什么是结构和静态结构之间的区别小编辑已经作出。 TIA – Photon001

回答

2

关键字static有许多含义取决于使用关键字的上下文。

如果结构数组是在函数内部声明的,那么这意味着该数组具有静态存储持续时间而不是自动存储持续时间。

考虑下面的例子

#include <stdio.h> 

struct A 
{ 
    int x; 
}; 

struct A * f(void) 
{ 
    struct A a = { 10 }; 

    return &a; 
} 

int main(void) 
{ 
    struct A *pa = f(); 
    printf("pa->x = "); 
    printf("%d\n", pa->x); 
} 

这里起作用f定义struct A类型的对象与所述自动存储持续时间,并返回指针到该对象。由于该对象在退出该功能后不会活着,因此该程序具有未定义的行为。例如使用内联的编译器在运行此程序我得到了以下结果

pa->x = 1073981248 

在另一方面,如果函数内的对象将具有静态存储持续时间,则程序将合式因为对象预订购是活着退出函数

#include <stdio.h> 

struct A 
{ 
    int x; 
}; 

struct A * f(void) 
{ 
    static struct A a = { 10 }; 

    return &a; 
} 

int main(void) 
{ 
    struct A *pa = f(); 
    printf("pa->x = "); 
    printf("%d\n", pa->x); 
} 

程序输出将如预期

pa->x = 10 

对象将保持理论值的调用之间的它的值之后e功能。例如

#include <stdio.h> 

struct A 
{ 
    int x; 
}; 

struct A * f(void) 
{ 
    static struct A a = { 10 }; 

    return &a; 
} 

int main(void) 
{ 
    struct A *pa = f(); 

    printf("pa->x = "); 
    printf("%d\n", pa->x); 

    pa->x = 20; 

    pa = f(); 

    printf("pa->x = "); 
    printf("%d\n", pa->x); 
} 

程序输出是

pa->x = 10 
pa->x = 20 

如果结构的阵列的任何函数之外声明则表示(除了默认静态存储持续时间)阵列名称具有内部这种联系在宣布它的编制单位之外是不可见的。

如果多个编译单元包含与关键字static相同的数组声明,那么每个编译单元都有自己单独的数组实例。

+1

你能解释一下stuct和静态stuct之间的区别吗? – Photon001

+0

@Raj查看我更新的帖子。 –

+0

感谢您的回答@Vlad来自莫斯科 – Photon001

相关问题