我知道C中的全局变量有时会有extern关键字.什么是extern变量?宣言是什么样的?它的范围是什么?
这与跨源文件共享变量有关,但这是如何工作的?我在哪里用extern?
如何创建在C中共享的全局变量?如果我将它放在头文件中,那么链接器会抱怨已经定义了变量.是在我的一个C文件中声明变量并手动将externs放在要使用它的所有其他C文件的顶部的唯一方法吗?这听起来并不理想.
如果我在.c文件中定义一个全局变量,我如何在另一个.c文件中使用相同变量的值?
在file1.c
#include<stdio.h>
int i=10;
int main()
{
printf("%d",i);
return 0;
}
file2.c中
#include<stdio.h>
int main()
{
//some data regarding i
printf("%d",i);
return 0;
}
第二个文件如何使用i此处第一个文件的值.
我一直在阅读很多关于为什么全局变量是坏的以及为什么不应该使用它们的原因.然而,大多数常用的编程语言都以某种方式支持全局变量.
所以我的问题是,仍然需要全局变量的原因是什么,它们是否提供了一些无法实现的独特且不可替代的优势?与用户指定的自定义间接相比,从本地范围中检索对象时,全局寻址是否有任何好处?
据我所知,在现代编程语言中,全局寻址与计算内存地址的每个偏移具有相同的性能损失,无论是从"全局"用户内存的开头偏移还是从一个this或任何一个偏移其他指针.因此,就性能而言,用户可以在使用公共指针间接所需的狭窄情况下伪造全局变量,而不会损失实际全局变量的性能.还有什么?真的需要全局变量吗?
我写的
// In file t.h
#ifndef __t_h__
#define __t_h__
static int abc;
#endif
-
//In   main.c
    #include <stdio.h>
    #include "t.h"
    int main()
    {
        abc++;printf("%d \n", abc);
        test();
    }
- -
//In test.c
#include <stdio.h>
#include "t.h"
void test()
{
    abc++;
    printf("%d \n", abc);
}
当我运行该项目,我发现output的abc is 1 and 1.但是当我改变它int abc时t.h.的输出abc = 1 and 2.为什么静态不会在控件到达test.c文件时保留该值.如果它不会保留那么为什么它不应该提供错误作为static variable can not be shared between/among文件?