C++ 什么';这里静态的目的是什么?
在中,C++ 什么';这里静态的目的是什么?,c++,c,static,C++,C,Static,在中,static用于文件范围中定义的标志: /* Flag set by ‘--verbose’. */ static int verbose_flag; 在while循环块范围中定义的long\u选项struct中: static struct option long_options[] 此处是否使用了static,以便其他文件无法访问变量?在这两种情况下,静态的使用方式是否相同?在结构中,它是否因为保存在相同的内存位置而没有重新初始化而更有效 如果static用于文件范围中的变量,则表
static
用于文件范围中定义的标志:
/* Flag set by ‘--verbose’. */
static int verbose_flag;
在while
循环块范围中定义的long\u选项
struct中:
static struct option long_options[]
此处是否使用了
static
,以便其他文件无法访问变量?在这两种情况下,静态
的使用方式是否相同?在结构中,它是否因为保存在相同的内存位置而没有重新初始化而更有效 如果static
用于文件范围中的变量,则表示该变量是该文件的本地变量。如果没有该关键字,您可以在另一个文件中使用extern
关键字
这同样适用于函数。如果C中的函数在文件中是静态的,那么它只能在该文件中使用,不能在其他文件中使用
是的,我想这是为了防止在其他文件中使用它。好吧,当C/C++文件中的任何代码块中出现static时,它是一个声明修饰符,表示其他文件无法访问该变量;当static出现在代码块中时,表示该变量为“static”。详细标志适用于前者,而长选项适用于另一个。我将按相反顺序执行:
static struct option long_options[]
用于一次性声明变量选项,该选项与执行while
循环的次数无关
但您应该将其视为一个整体(摘自您的链接):
。。。
而(1)
{
...
静态结构选项长_选项[]=
{
/*这些选项设置了一个标志*/
{“verbose”,无参数,&verbose\u标志,1},//与其说是文件,不如说是翻译单元。翻译单元基本上是预处理后剩下的部分,因此它也包含了所有.h文件中的所有代码。而.h文件中的静态声明在包含该.h文件的每个翻译单元中创建了该内容的独立副本。因此它是不准确的/误导性地说“其他文件无法访问”.@hyde你为什么不写你自己的答案?当然,建议改进是可以的,但是评论对讨论本身并没有帮助。verbose\u flag
在文件范围内,所以即使没有static
,它在迭代之间也不会丢失它的值。它是出于不同的原因而创建的static
。@hyde我正要通信不一样thing@hyde是的,你是对的,那么它是为了使变量完全本地到这个文件,确保没有使用其他文件。
...
while (1)
{
...
static struct option long_options[] =
{
/* These options set a flag. */
{"verbose", no_argument, &verbose_flag, 1}, // <-- IMPORTANT HERE !
{"brief", no_argument, &verbose_flag, 0}, // <-- IMPORTANT HERE !
/* These options don’t set a flag.
We distinguish them by their indices. */
{"add", no_argument, 0, 'a'},
{"append", no_argument, 0, 'b'},
{"delete", required_argument, 0, 'd'},
{"create", required_argument, 0, 'c'},
{"file", required_argument, 0, 'f'},
{0, 0, 0, 0}
};
...
}
...