我有以下代码,我在代码中的位置之后定义了几个外部(全局)变量,我需要使用它们。 为此,我使用关键字 extern 来声明它们而不为它们保留存储空间。
int main(int argc,char *argv[])
{
extern int a;
extern double b;
/* ...use the variables somehow... */
{
int a = 10;
static double b = 2.0;
如果我这样做,编译器会抱怨我将b变量定义为静态(因此使用内部链接),之前我将其声明为extern。 但是如果我在使用它之前反转顺序并定义它并在main中声明它(这是我知道的otpional ...),就可以了。
static double b = 2.0;
int main(int argc,char *argv[])
{
extern int a;
extern double b;
/* ...use the variables somehow... */
{
int a = 10;
那么如果我想在定义它之前使用外部私有变量(即内部链接)呢?这是禁止的吗?为什么?
答案 0 :(得分:1)
extern
关键字告诉编译器我们引用的变量位于不同的转换单元(基本上是另一个源文件),而static
关键字表示变量(在全局变量)是当前翻译单元的本地变量,在其他源文件中无法看到,因此将两个关键字一起使用是没有意义的。
在相同的文件中将b
声明为全局后,它在main
中可见,并且无需再次声明它,您只需使用它。
另一方面,如果它在不同的翻译单元中声明为全局变量,则必须使用extern
关键字。