【发布时间】:2021-01-30 05:07:32
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
int function(int);
int main()
{
int a=1;
extern b;//can be only declared
printf("a=%d\n",function(a));
printf("b=%d\n",value());
return 0;
}
int function(int v)
{
return v+1;
}
在file1.c:
static int b=20;
int value() //can't be used on a static function
{
return b;
}
在上面的代码中,虽然我将变量b 设为static,但它可以从其他文件访问。如何访问它,因为static 关键字不应该允许从其他文件访问该变量,对吗?我有点糊涂了。
【问题讨论】:
-
C 和 C++ 是两种不同的语言。请删除多余的标签。
-
我没有看到您直接从
main或function访问b。value可以直接访问它,并且在printf中调用时返回b的值 -
@jkb :它不应该被打印出来吗??那是我很困惑
-
static只是意味着不能从其他源文件直接通过名称访问该变量。通过调用可以直接访问它的函数来间接“访问”它并没有错。这样的函数甚至可以返回一个指向静态变量的指针,然后调用者可以使用该指针直接访问该变量(但通过指针,而不是通过名称b)。 -
不应将其视为安全功能,就好像编译器会保护变量免受外部代码的所有可能干扰一样。这主要是一种减少全局命名空间混乱的方法。
标签: c linker-errors external static-linking