我知道程序中可以访问的变量是全局的.这是一个正确的定义还是应该说“在一个块之外声明的变量”?
我试图了解如何更具体地定义它们.我知道在函数外部简单地声明全局变量的例子(通常在include和using之后).我知道可以使用extern关键字的前向声明.
以下是3个全局变量(t,d和c)的示例:
#include <iostream>
#include "some.h"
using std::cout;
int t;
extern double d;
int main() {
extern char c; // Or here c is not an example of global variable?
t = 3;
cout << t;
}
那是所有情况吗?
解决方法:
术语“全局变量”可以被抛出很多,有时它并不真正正确,因为术语“全局变量”并不是由标准真正定义的.对于可从“任何地方”访问的变量来说,这是一个非常多产和通用的术语,但这不是全局(特别是因为“任何地方”都是非常主观的!).
要真正掌握这一点,你需要了解变量的两个主要方面:存储和链接有一个很好的答案here具体.
让我们看看“全局变量”的可能定义:
>在某些圈子中,“全局变量”表示具有外部链接的任何变量.这包括您提供的每个示例.
>在其他情况下,内部联系也被认为是全球性的.除了第一个组之外,还包括使用static或const说明符在函数外部声明的变量.有时这些不被认为是真正的全局,因为它们不能在该特定编译单元之外访问(通常是指当前.cpp文件及其在一个blob中包含的所有头文件).
>最后,有些人认为任何静态存储变量都是全局的,因为它的存在在整个程序的生命周期中都是持久的.因此除了第一组和第二组之外,在函数内声明的变量,但声明为static的变量可以称为全局变量.返回对这些的引用是可行的,因此它们仍然可以通过主观的“任何地方”访问.
用你的类似例子总结一下:
extern int extern_int; // externally linked int, static storage (first group)
int just_an_int; // by default, externally linked int, static storage (first group)
static int static_int; // internally linked int, static storage (second group)
const int const_int; // by default, internally linked int, static storage (second group)
int & get_no_link_static_int()
{
static int no_link_static_int = 0; // no linkage int, static storage (third group)
return no_link_static_int;
}
标签:c,global-variables 来源: https://codeday.me/bug/20190831/1776133.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。