变量只能全局“声明”,但不能修改/(单独初始化)

2024-01-26

免责声明:

  • 这可能是一个非常微不足道的问题(虽然我找不到答案), and
  • 一个纯粹的理论问题(我从来不需要这样做,也从未见过使用此类构造的代码,但我只是好奇如何/为什么会发生这种情况。)
  • The C/C++双标签,因为我在 C 和 C++ 上测试了这部分代码,它只有 4 行代码(唯一的区别是gcc/clang发出警告g++/clang++给出错误。)

背景:在回复另一个人的时候question https://stackoverflow.com/questions/54864947/qt5-error-colorkeymap-does-not-name-a-type/54867539#54867539,我开始思考为什么OP不能modify a public static多变的。我想了一下,然后进一步简化了问题,我可以看到相同的效果,但不需要任何类或静态成员变量。

Question:那么下面的代码可以重现观察结果。

int global_n; // I know it can be initialized right away here also: int global_n = 1;
global_n = 2; // This does not compile in C++. In C it gives a warning about missing type-specifier

int main() {
    global_n = 2; // This does compile in both C/C++ of course
}
  1. 这让我想到了我的问题:全局变量(因此static变量/成员变量)只能在声明时直接初始化。但任何后续修改只能发生在函数内部。正确的?

  2. 这有什么具体原因吗?


在函数之外,不能有语句(即可执行代码行),只能有声明和定义。

如果是global_n = 2;在全局范围内,C90 有一个遗留功能,即如果声明变量时没有类型,则该变量的默认类型为int(C99 删除了该功能并需要一个类型)。这就是本例中发生的情况,这也是您收到有关类型缺失的警告的原因。

C++ 没有这个规则,因此这显示为函数外部的语句,这是一个错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

变量只能全局“声明”,但不能修改/(单独初始化) 的相关文章

随机推荐

  • React 中的 refs 是什么?

    我无法理解 React 中的 refs 是什么 我知道它是一个回调函数 你把它放在渲染函数中 但除此之外我无法理解它是什么以及它的目的是什么 引用是您获取已创建组件的句柄的一种方式 ie
  • php Soap - SoapFault 看起来我们没有 XML 文档

    我是一名编程初学者 正在学习使用 Apache2 4 Web 服务器使用 php 和 Soap 进行 Web 服务的教程 本教程使用不带 wsdl 文件的soap Client
  • 文档模板 - 角色设置为亲自或电子邮件签名

    我已经成功创建了一个系统来使用文档模板来创建新信封 该系统具有选项卡式 UI 和 iframe 每次更改选项卡以及 URL 过期时 都会从 Docusign API 获取新 URL 我的问题是现在 一些客户将亲自签名或通过电子邮件签名 阅读
  • 如何在 Mongodb 上对超过 2 个字段进行分页

    如何在 Mongodb 上对超过 2 个字段进行分页 我的数据看起来像这样 id product name price rating search score 要使用 2 个排序字段 价格 id 对下一页进行分页 我正在使用此逻辑 db u
  • scikit-learn 中是否有可用的子空间聚类包

    scikit learn 中是否有任何类型的子空间聚类包可用 如果有人还有兴趣的话 是的 有一个使用 scikit learn 子空间聚类 https github com ChongYou subspace clustering 它是用于
  • 使用 C# 导出 Azure 数据库

    我的 C 程序可与 Azure 数据库配合使用 我正在使用 Microsoft Rest 和 Microsoft Azure Management 库来做一些事情 数据库复制 操作 删除等 我尝试导出 Azure DB 但找不到如何在 C
  • 登录 Facebook 注册回调未调用

    这是我的 onCreate 方法 Override protected void onCreate Bundle bundle super onCreate bundle setContentView R layout activity s
  • 通用多对多关系

    我正在尝试创建一个消息传递系统 其中消息的发送者和接收者可以是通用实体 这对于发件人来说似乎很好 其中只有要引用的对象 GenericForeignKey 但我不知道如何为收件人解决这个问题 GenericManyToManyKey 下面是
  • 通过将值与列名匹配来填充 data.frame

    我有两个数据框 df1 空 但具有特定的名称 apple orange banana pear grape 0 0 0 0 0 df2 fruit1 count1 fruit2 count2 apple 2 pear 1 grape 4 o
  • 如何比较两个 .NET 对象图的差异?

    在我们的客户端 服务器应用程序中 我们一直使用 BinaryFormatter 进行序列化过程 出于性能原因 我们正在尝试迁移到 protobuf net http code google com p protobuf net http c
  • javax.persistence 字段、getter 或 setter 上的注释?

    我目前正在学习 Hibernate 和 Java Persistence API 我有一个 Entity 类 需要将注释应用于各个字段 我已经在下面的代码中包含了它们可以去的所有三个地方 我应该将它们应用于字段本身 getter 还是 se
  • 有条件地操作数组中元素的属性

    我是 javascript 新手 正在尝试通过玩具示例学习一些基础知识 假设我有一个包含六个人数据的数组 const myArray id 1 value 75 friends 3 id 2 value 40 friends 4 id 3
  • 使用带有闭包映射的failFast会破坏“并行”步骤

    不确定这是我对 Groovy 的有限了解还是 Pipeline 的怪癖parallel步 我无法让它接受failFast如果我使用映射而不是单独传递每个闭包 def map map spam node echo spam map eggs
  • SQL Server:如何在选择期间从另一个表设置列别名?

    我有2张桌子 Table 1 DB1 DB2 DB3 DB4 DB5 Some other identifiers Table 2 EnumText EnumValue Some other identifiers 我想做的是 从表1中选择
  • 异步任务。哪种架构? (或 ZeroMQ 中的模式)

    我希望 Linux 服务器 主机上的一个应用程序与虚拟机中 Win7 客户端 上的应用程序进行通信 选择的库是 ZeroMQ 但如何管理异步任务呢 让我举个例子吧 VM 中的应用程序以任意时间间隔生成任务并将其发送到 Linux 盒子 这将
  • 在Python中定义嵌套字典

    我想在 python 中定义一个嵌套字典 我尝试了以下方法 keyword MyTest Later I want to pull this iterating through a list key test1 sections dict
  • 您可以将原始 WebGL 纹理与 Three.js 一起使用吗

    我有一个相当复杂的架构 我在 Three JS 中完成大部分工作 但我也有一个特殊的渲染器 可以直接渲染到原始 WebGL 纹理 是否可以在 Three js 纹理 中使用此 WebGL 纹理 看起来 Three JS 纹理类只是图像 视频
  • Zend_Validate_Db_RecordExists 针对 2 个字段

    我通常使用 Zend Validate Db RecordExists 来更新或插入记录 这对于一个要检查的字段来说效果很好 如果要检查两个字段怎么办 validator new Zend Validate Db RecordExists
  • 如何使用 python 和 beautiful soup 将 html 页面拆分为多个页面

    我有一个像这样的简单的 html 文件 事实上 我从 wiki 页面中提取了它 删除了一些 html 属性并转换为这个简单的 html 页面 h1 draw electronics schematics h1 h2 first header
  • 变量只能全局“声明”,但不能修改/(单独初始化)

    免责声明 这可能是一个非常微不足道的问题 虽然我找不到答案 and 一个纯粹的理论问题 我从来不需要这样做 也从未见过使用此类构造的代码 但我只是好奇如何 为什么会发生这种情况 The C C 双标签 因为我在 C 和 C 上测试了这部分代