static int a和int a有什么区别?

时间:2011-01-25 09:56:49

标签: c

  

可能重复:
  Difference between 'global' and 'static global'

语句1和2之间有什么区别: -

#include <stdio.h>
//In the global declaration area 

static int a; // 1.
int b;        // 2.

感谢您的帮助。

6 个答案:

答案 0 :(得分:7)

static全局变量是其定义的translation unit的本地变量。因此,如果您在两个不同的转换单元中定义static int a;,则会创建两个独立变量。如果您在两个转换单元中定义非静态全局变量int b;,您将遇到链接器错误(但您可以在两个转换单元之一中使用extern int b;告诉链接器它应该使用来自其他翻译单位的全局变量。)

答案 1 :(得分:6)

两者都是变量定义,但是,应用于“全局声明区域”中的变量的static关键字限制了仅在转换单元中看到的全局变量是定义。

答案 2 :(得分:3)

它们都在程序的整个生命周期内。声明为static的变量只在声明它的文件中具有作用域,因为可以使用extern声明从其他文件访问声明为static而不声明的变量。

原始来源 - http://bytes.com/topic/c/answers/860211-global-variable-static-global-variable

答案 3 :(得分:2)

static int a只能在该文件中访问。可以使用int b从其他文件访问extern int b

答案 4 :(得分:2)

static int a; 
int b; 

a有内部联系。 b有外部联系。

C99 6.2.2

  

6.2.2识别者的联系

     
      
  • 1)在不同范围或同一范围内多次声明的标识符可以是   通过称为链接的过程来引用相同的对象或函数。有   三种联系:外部,内部和无。

  •   
  • 2)在构成整个程序的翻译单元和库的集合中   具有外部链接的特定标识符的声明表示相同的对象或   功能。在一个翻译单元内,每个声明的内部声明   连接表示相同的对象或功能。每个声明的声明都没有   link表示一个独特的实体。

  •   
  • 3)如果对象或函数的文件范围标识声明包含存储 -   class speci fi er static,标识符具有内部链接

  •   

答案 5 :(得分:1)

静态变量的生命周期延续到程序的生命周期。但是,范围规则仍然适用。

如果在方法之外定义静态变量(通常在类的开头),则可以从该类中的任何位置获取变量。

您无法更改这些对象的值。它们通常用于存储API密钥等内容。