无法从多维数组的初始值设定项推断边界

2024-03-14

以下代码无法编译:

int main() {
  int a[][] = { { 0, 1 },
                { 2, 3 } };
}

产生的错误消息是

error: declaration of 'a' as multidimensional array must have bounds for all dimensions except the first
int a[][] = { { 0, 1 },
           ^

标准有规定吗?如果是这样,那是为什么呢?我认为在这里推断界限会很容易。


标准有规定吗?

嗯,是的。

§8.3.4/3 当多个规范“数组”相邻时, 创建多维数组类型;仅常数的第一个 指定数组边界的表达式可以被省略。在 除了不完整对象类型的声明之外 允许,在某些情况下可以省略数组边界 函数参数的声明 (8.3.5)。数组边界也可以 当声明符后面跟着一个时被省略初始化器(8.5)。 在这种情况下,界限是根据初始数量计算的 元素(例如,N)提供(8.5.1),以及标识符的类型 的D是“数组N T”。此外,如果前面有 在绑定所在的同一范围内声明实体 指定时,省略的数组边界被视为与其中相同 较早的声明,静态数据的定义也类似 班级成员。

如果是这样,那是为什么呢?

一方面,不能从不完整的类型构造数组(void例如)。未知边界的数组是不完整类型之一:

§8.3.4/1 ...数组类型的对象包含连续分配的 非空集合N类型的子对象T。除下述情况外,如果 省略常量表达式,标识符的类型D is “ 派生声明符类型列表未知边界的数组T“, 一个 不完整的对象类型。 ...

§8.3.4/2 数组可以由基本类型之一构造而成 (除了void)、从指针、从指向成员的指针、从 类、枚举类型或另一个数组。

此外:

§3.9 A class that has been declared but not defined, an enumeration type in certain contexts (7.2), or an array of unknown size or of incomplete element type, is an incompletely-defined object type.45 ...

45) The size and layout of an instance of an incompletely-defined object type is unknown.

我认为在这里推断界限会很容易。

初学者常犯的一个错误是,编译器具有神奇的力量。编译器使用它的信息来工作already有,没有create凭空而来的信息。如果你要求它创建一个未知大小的对象,它根本无法做到这一点。请参阅以下示例:

仅最里面的尺寸可以省略。中元素的大小 根据给定数组变量的类型推导数组。这 因此,元素类型必须具有已知的大小。

  • char a[] = { ... };有元素(例如a[0]) of size1(8 位),大小未知。
  • char a[6] = { ... };有元素of size1,尺寸为 6。
  • char a[][6] = { ... };有元素(例如a[0],这是一个数组)of size6、尺寸未知。
  • char a[10][6] = { ... };有元素of size6. 尺寸为 60。

不允许:

  • char a[10][] = { ... };将有 10 个元素大小未知.
  • char a[][] = { ... };将有未知数量的元素大小未知.

Source https://stackoverflow.com/a/7433226

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

无法从多维数组的初始值设定项推断边界 的相关文章

随机推荐

  • 不同的pdf有不同的cmap,如何制作全局cmap,以便将许多具有相同字体映射的pdf处理到/toUnicodemap

    我有很多pdf文件 复制后render错误的文字 由于不好 字体映射到 unicode 映射 像这样的东西 原创 复制时渲染 我已经浏览了各种答案 无法从 pdf 复制准确的印地语内容 https stackoverflow com que
  • TableView 不会在焦点丢失事件上提交值

    我想创建一个具有以下功能的表 按键编辑 输入键 下一行 Tab 键 下一列 退出键 取消编辑 下面是实现这些功能的代码 价值观应该致力于失去焦点 问题 他们没有承诺 焦点更改事件被触发 根据控制台输出 值将是正确的 但最终表单元格中的值是旧
  • 使用 ORMLite 在数据库中表示字符串列表

    首先我是 ORMLite 的新手 我希望我的模型类有一个字符串列表字段 它最终会保存我的模型对象的标签列表 我应该使用哪些 ORMLite 注释 首先我不想有一个包含所有标签的表格 然后使用 ForeignCollectionField 我
  • Java:一个文件中的多个类声明

    在 Java 中 您可以在单个文件中定义多个顶级类 前提是其中最多有一个是公共的 请参阅JLS 7 6 http docs oracle com javase specs jls se8 html jls 7 html jls 7 6 参见
  • 从 MS SQL 中的 PHP PDO 存储过程返回 Select *

    对于未来的用户 这个问题的底部包含更正的工作代码 我知道 Select 不是最好的 但在这个示例中 我尝试从 php 调用存储过程并返回整个结果集 以便我可以在代码中循环遍历数组 这是我当前的存储过程 USE hanoncs AskMe G
  • 如何在codeigniter中获取http请求正文数据?

    我在从 IOS obj c 客户端将 JSON 编码数据发布到 CI 控制器时遇到问题 我相信我的问题与提到的问题相同here https stackoverflow com questions 8569150 codeigniter re
  • 在嵌套对象上使用 JsonConvert.DeserializeObject

    我想在加载应用程序时使用 JSON Net 来处理配置文件的解析 将所有 KVP 保持在同一范围内绝对没问题 不过 我想将其分解为子类别 例如 Settings WebServer Settings GameServer 等 为了便于阅读
  • ffmpeg从mp4中提取基本流

    我已经使用 Bambuser 的 ffmpeg 端口成功将 ffmpeg 库移植到 Android 我目前正在研究 ffmpeg 的源代码 特别是 ffplay c 和 api examples c 文件 我想从 Android 2 2 录
  • 找到 numpy 数组中最大的正方形

    我正在尝试解决这个算法问题 在 numpy 数组中找到只有一个值的最大平方 示例图片 我的代码花费了太多时间 有办法提高速度吗 import numpy as np answer 0 def allsame board memory boa
  • 使用单层感知器求解 XOR

    我一直听说 XOR 问题不能通过单层感知器 不使用隐藏层 来解决 因为它不是线性可分的 我知道没有线性函数可以区分类别 但是 如果我们使用像 sin 或 cos 这样的非单调激活函数 情况仍然如此吗 我想这些类型的函数可能能够将它们分开 Y
  • Caliburn.Micro:以编程方式创建和绑定视图

    我目前正在 Caliburn Micro 中尝试视图合成 我有一个工作示例 其中我通过 View Model 附加属性路由将多个基于用户控件的视图注入到我的主 shell 中 到目前为止 一切都很好 在我的应用程序中 我正在使用主要由 Wi
  • 多处理 numpy 未定义错误

    我正在使用以下测试代码 from pathos multiprocessing import ProcessingPool as Pool import numpy def foo obj1 obj2 a obj1 2 b numpy as
  • 聚合elasticsearch中的值数组

    我需要聚合一个数组 如下所示 两个文档示例 index log type travels id tnQsGy4lS0K6uT3Hwzzo g score 1 source state saopaulo date 2014 10 30T17
  • (int_1 += *pointer++ = int_2++) < int_3 是什么意思?

    我正在读书这个之前的答案 https stackoverflow com a 14164818 1894277其中有一段我无法理解的C代码 它本质上看起来像这样 if int 1 pointer int 2 lt int 3 continu
  • 当我尝试使用 CComObject 函数 CreateInstance 时,_pAtlModule 指针为空

    我正在开发 OPC OLE 过程控制 客户端程序 使用异步 CALLBACK 方法使用 KepServer 从 PLC 获取数据 但是我遇到了问题 CComObject
  • 为什么 bash 在 Windows 中冻结?

    我正在 Windows 中运行 bash 程序 该程序与 msys 和 mingw 一起安装 我正在尝试跑步 configure 但是 每当我这样做时 配置都会冻结 checking whether make sets MAKE 您能想到为
  • 如何使用 JDK 11/Maven/Eclipse IDE 运行 JavaFX 应用程序

    问题 从 Eclipse IDE 运行基于 Maven 非模块项目 项目名称 howdyjfx 的 JavaFX 应用程序会生成以下编译错误 ERROR Failed to execute goal org codehaus mojo ex
  • clearInterval() 不会停止 setInterval() - Firefox 扩展开发

    我正在修改篡改数据 这将允许我将其观察到的 HTTP 请求 响应发送到服务器 到目前为止 该功能已正确实现 下一步是自动化此过程 我希望使用 复选框 类型的工具栏菜单按钮来打开和关闭此功能 到目前为止 我在 XUL 中有这段代码
  • File.Copy 目标文件是目录,而不是文件。

    我可能没有正确执行此操作 并且浏览 MSDN 库对我没有多大帮助 我正在尝试将数据库从项目文件夹复制到另一个位置 我最初尝试了桌面 它指出该目录不可用 这就是我目前所拥有的 private string currentDb J Projec
  • 无法从多维数组的初始值设定项推断边界

    以下代码无法编译 int main int a 0 1 2 3 产生的错误消息是 error declaration of a as multidimensional array must have bounds for all dimen