语句1和2之间有什么区别: -
#include <stdio.h>
//In the global declaration area
static int a; // 1.
int b; // 2.
感谢您的帮助。
答案 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密钥等内容。