我已经被要求修改的驱动程序代码中经常看到静态结构声明.
我试图寻找有关为什么structs声明为静态的信息以及这样做的动机.
你能有人帮我理解这个吗?
我有一个foo包含整数的命名空间bar,声明如此...
foo.h中:
namespace foo {
int bar;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我foo.h只包含一个文件,这就可以了.但是当我foo.h从两个或更多文件中包含时出现问题:我收到链接器错误.我想出如果我声明bar为static,我可以包含foo.h在多个文件中.这对我来说似乎很奇怪,因为我不知道可以在命名空间内声明一个静态变量.(那有什么意思?)
为什么这样做?更重要的是,为什么没有它的工作没有 static?static在用于什么时意味着什么namespace?
可能重复:
C程序中"静态"是什么意思?
static关键字在C 中的含义是什么?
我正在使用ANSI-C.我在几个代码示例中看到,它们static在变量前面和函数前面使用关键字.使用变量的目的是什么?使用函数的目的是什么?
众所周知,关键字在C语言中static有多重含义 .C99增加了合法写作的可能性
void foo (int arr[static 50])
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
这增加了混乱,而C++有静态成员变量和函数.
如果可以以某种方式连接所有用途,这不会那么麻烦,但我发现很难找到某些情况的链接.特别是为什么static关键字应该用于修改可见性(链接),或者它究竟与数组的最小元素数量有关.
那么滥用static关键字是否存在历史原因,或者是否存在连接其所有用途的秘密链接?
什么是之间的区别static inline,extern inline和正常的inline功能?
我已经看到了一些模糊的解释.据我所知,static inline不仅仅是一个inline仅在某个文件中引用的函数,因为static关键字通常意味着.这同样适用于extern inline过我想,这是不一样的解释与extern变量.任何答案将不胜感激!
在C结构中拥有"静态"成员是否合法?
例如
struct my_struct {
int x;
static int y;
};
Run Code Online (Sandbox Code Playgroud)
如果它确实合法,那么使用"静态"关键字有什么含义?
声明为staticC和C++之间的任何函数之外的变量之间是否存在任何差异.我读到这static意味着文件范围和变量将无法在文件外部访问.我还读到在C中,全局变量是static.那么这是否意味着C中的全局变量无法在另一个文件中访问?
返回静态类型数据可能产生的影响是什么?我们什么时候应该实际使用它?
static ssize_t
my_read(int fd, char *ptr)
{
//code from Stevens Unix Network programming.
if (something)
return (-1)
if (something else)
return (0)
return (1)
}
Run Code Online (Sandbox Code Playgroud)
为何静止在这?
谢谢.
我知道static在C中是一个重载的关键字.在这里,我只关心它作为一个关键字用来强制内部链接.
如果在.c文件中声明了全局变量,则使用static和不使用之间有什么区别static?无论哪种方式,没有其他.c文件可以访问变量,因此该变量基本上是文件的"私有",有或没有static关键字.
例如,如果我有一个文件foo.c,并且我声明了一个全局变量:
int x = 5;
该变量x仅对内部代码可用foo.c(除非我在一些带有extern关键字的共享头文件中声明它).但是如果我没有在头文件中声明它,那么如果我输入的话会有什么不同:
static int x = 5.
无论哪种方式,它似乎x都有内部联系.所以我static对这方面的目的感到困惑.
静态局部变量存储在内存中的哪个位置?只能在声明它们的函数内访问局部变量.
全局静态变量进入.data段.
如果静态全局变量和静态局部变量的名称相同,编译器如何区分它们?