C:对不完整类型的数组添加下标合法吗?

2024-02-04

我在标准中找不到相关位,但 gcc 和 clang 允许这样做,所以我想我想知道它是编译器扩展还是语言的一部分。如果可以的话请提供一个链接。

这可能会因以下情况而出现:

extern char arr[];

func(arr[7]); /*No error.*/

后期编辑:我想我最好对此有一个清晰的了解,虽然我已经继续前进,但我从未这样做过,所以开始悬赏,我将奖励给第一个给我一个清晰、简洁的参考资料的人C89 标准解释了为什么允许这样做。如果没人能在C89中找到答案,C99是可以接受的,但你需要先看看C89标准。


以下声明

extern char arr[];

是一个具有外部链接的声明,并表示arr有一个数组类型char,这意味着arr可以有不完整的类型。

根据“6.7 声明”(n1570):

7 如果声明一个对象的标识符时没有链接,则该对象的类型应为 在其声明符的末尾完成,或者在其 init 声明符的末尾(如果它有一个) 初始化器;对于函数参数(包括原型),它是调整后的 要求完整的类型(见 6.7.6.3)。

And arr[7] equals *(arr + 7), and arr需要有一个“指向完整对象类型的指针”的类型,以及arr将从“数组char“到”指针char“ 在这种情况下。

根据“6.3.2.1 左值、数组和函数指示符”(n1570):

3 除非它是sizeof运营商,_Alignof运算符,或 一元&运算符,or 是用于初始化数组的字符串文字,是一个具有 type ‘‘array of type’’ 被转换为类型为‘‘pointer to type’’ 的表达式,该表达式指向数组对象的初始元素,并且不是左值。

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

C:对不完整类型的数组添加下标合法吗? 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • JQuery 模式在提交前询问

    我有一个表单 用户可以在其中输入他的姓名 必填 出生日期 不需要 并且在提交表单之前 有一个确认信息 表明他 她是否确定提交没有出生日期的表单 我正在使用一个模式 它将提交上面的表格 我尝试运行下面的代码 但我看不出为什么不起作用的问题 当
  • 帮助构建修补的 Android 框架

    我是 Android 平台开发的新手 我刚刚成功构建氰化物7 http www cyanogenmod com 应用补丁后的源 这会向系统添加额外的 jar 适合 system framework 目录 刷新设备并检查新的自定义 jar 是
  • MySQL - 获取组的 sum() 分组 max()

    我有如下表结构 每行都是一场游戏 每个人每个月可以玩很多次或不玩 id person score date 1 32 444 2011 05 2 65 528 2011 05 3 77 455 2011 05 4 32 266 2011 0
  • MySQL:主机列中的 % 代表什么以及如何更改用户密码

    嗯 这就是我能看到的 select host user from mysql user host user me 127 0 0 1 root 1 root localhost localhost debian sys maint loca
  • JDBC 字符编码

    我有一个在 GlassFish 3 上运行的 Java Web 应用程序和在 MySQL 上运行的 JPA EclipseLink 我面临的问题是 如果我使用以下命令将实体保存到数据库中update 方法 String领域失去完整性 显示而
  • 在编译时计算小整数的阶乘

    我刚刚实现 再次 一个递归模板 用于在编译时计算整数的阶乘 谁会想到有一天我实际上会需要它 不过 我没有自己动手 而是去了Boost http www boost org 寻找答案 然而 特殊数学中的阶乘函数明确禁止将其与整数类型一起使用
  • 在Java BufferedImage中绘制完全透明的“白色”

    这可能听起来有点奇怪 但请耐心听一下 那里is一个原因 我正在尝试在灰色背景上的文本周围生成白色发光 为了生成发光 我创建了一个比文本大的新 BufferedImage 然后将白色文本绘制到图像的画布上 并通过卷积运算 http docs
  • 如何在Python中将csv转换为json?

    我对编程非常陌生 过去 3 4 周一直在学习 python 这是给出的作业之一 Input A B C D 1 2 3 4 5 6 7 8 Output A 1 B 2 C 3 D 4 A 5 B 6 C 7 D 8 我一直在尝试将代码设置
  • stat_smooth 和 geom_ribbon 之间的交互不良

    我正在回答这个问题 https stackoverflow com questions 64574595 geom density returns plot without considering real values 这需要绘制平滑区域
  • 如何在Python中基于if语句保存一个文档?

    我正在尝试根据 if 语句保存文档 我在这里创建单选按钮 info Option 1 Option 2 Option 3 vars for idx i in enumerate info var IntVar value 0 vars ap
  • NoClassDefFoundError:配置属性源

    从昨天开始 在全新安装后 我们的 spring boot 项目在没有更改 Maven 文件 库或其他配置的情况下出现了问题 我们确实尝试将 SpringFrameWork 和 Spring boot 的 pom 版本更新到 1 5 4 Re
  • 整数数组作为字典的键

    我希望拥有使用整数数组作为键的字典 如果整数数组具有相同的值 甚至不同的对象实例 它们将被视为相同的键 我该怎么做呢 以下代码不起作用b是不同的对象实例 int a new int 1 2 3 int b new int 1 2 3 Dic
  • 如何获取所有 Spark 配置以及默认配置?

    我正在开发一个项目 需要收集所有 Spark 配置 问题是 如果没有明确设置参数 我将需要默认值 有没有办法获取所有配置 包括所有默认值 我尝试过 sc getConf getAll 但通过这种方式 我没有得到默认值 SparkListen
  • Java 卡连接到模拟器失败

    我正在尝试测试 Java Card 小程序以建立与 cref 等模拟器的连接 try sckClient new Socket localhost 9025 InputStream is sckClient getInputStream O
  • 如何使用 PHP、CURL 抓取 javascript 网站 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 PHP 应用程序内从另一个站点呈现 javascript https stackoverflow com questions 5332161 how do i render javascrip
  • flutter:地理定位器不起作用,请确保清单中至少定义了 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION

    我正在尝试使用地理定位器 并且我添加了两者
  • Java中的中断线程

    我想优雅地关闭线程 我在网上看到了很多代码并在这里查询 我认为有两种关闭方法 使用布尔标志 只要改变一个标志 我们就可以在 run 方法中破坏代码 使用中断方法 我的问题是 为什么要避免使用布尔标志来正常关闭线程 当我运行示例程序时 它运行
  • 链接静态方法

    这可能没有解决方案 或者我可能找不到解决方案 但这里是 注意 我知道下面的代码是不正确的 我只是想展示我到底是什么想去完成 我想做一些事情 public class ActionBarHandler public static Action
  • Rails - 如何获取访问者的IP地址?

    我需要将访问者的 IP 地址存储到我们的数据库中 这是我尝试执行此操作的方法 ip request remote ip ip request env REMOTE ADDR 但在这两种情况下 ip变量存储值127 0 0 1 即使我将应用程
  • C:对不完整类型的数组添加下标合法吗?

    我在标准中找不到相关位 但 gcc 和 clang 允许这样做 所以我想我想知道它是编译器扩展还是语言的一部分 如果可以的话请提供一个链接 这可能会因以下情况而出现 extern char arr func arr 7 No error 后