问题标签 [compound-literals]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 后缀表达式(类型名称){initializer-list}
该部分6.5.2.5/4
提供了有关postfix-expression
表单的说明( type-name ) { initializer-list }
。这里是:
如果类型名称指定一个未知大小的数组,则大小由 6.7.9 中指定的初始化列表确定,复合文字的类型是完整数组类型的类型。否则(当类型名称指定对象类型时),复合文字的类型是类型名称指定的类型。无论哪种情况,结果都是
lvalue
.
我不明白措辞the type of the compound literal
。文字怎么可能有类型?对应的未命名对象的类型是指的the type of the compound literal
吗?
例如
这里initializer-list
用于初始化类型为 的未命名对象long long [4]
。
也不清楚 . 的目的是什么In either case, the result is an lvalue
。当在右操作数上使用时assignment-expression
,lvalue conversion
它不再是左值。
c - 函数调用中的花括号在 C 中是什么意思?
我尝试解决 K&R C 书中的练习 1-24,您必须在其中创建一个可以检测基本语法错误(不平衡括号、方括号等)的程序。我运行了一些测试以在分散在我系统上的 C 源文件上对其进行调试。我的程序在文件中遇到此行时检测到错误:
我做了一个假设,每次遇到常规大括号(外部注释、双引号)时,括号和括号必须保持平衡。正如此错误所示,这不是真的。不幸的是,我找不到它的含义。谢谢你的帮助。
c - 初始化包含数组的结构
我在 C 中有一个结构,其成员是浮点数组。我想在编译时初始化它,如下所示:
但我得到编译错误。
一种可能的解决方案可能是在结构中使用数组而不是指针。这是来自此处的一个非常相似的问题的公认答案:https ://stackoverflow.com/a/17250527/1291302 ,但这种方法的问题是我不知道 typedef 时的数组大小。不仅如此,我可能还想初始化另一条更大的曲线。
另一种方法可能是使用 malloc,但我发现这种做法有点过头了,因为我在编译时就知道数组大小,而且我不需要在运行时更改它。
我不知道其他可能有用的方法。也许将数组转换为指针?- 我真的不知道我会如何处理。
c - 如何使用由复合文字定义的结构的成员?
我找到了这段代码,它使用了一个指向由复合文字构成的结构的指针:
我的问题是:
- 用于修改和/或评估
j++
的有效表达式如何?i
x
- 我怎样才能访问会员
i
或x
?的指针偏移量p
?
c - 将复合文字传递给函数是否有效?
我有一个结构类型作为参数,需要将它传递给函数。
整个代码如下:
如果我在 for 循环中调用 insert,它将打印 .....->3->3->3....(无法停止)
但是,如果我只是将 for 循环替换为
它会正常运行。我想知道我的 for-loop 版本代码发生了什么。
c - 为什么有人会定义这样的指针?
我不太明白,因为我想不出只有一个“*”而不是 2 个我无法完成的任何事情。
做这样的事情的主要关注点/优势是什么?
c - 使用 _Generic 宏和复合文字修复 gcc 警告
我有一个带有联合和枚举的结构。我制作了一个宏,它输出结构的复合文字,根据传递给宏的类型设置联合的种类和数据使用_Generic。
示例代码:
它确实使用 gcc 编译,然后正确运行它输出:
但是我得到了所有这些编译警告:
我尝试在复合文字中进行强制转换,如下所示:
但我收到不同的警告:
c - XC8 v2.10 C99 中的数组索引类型和警告 (752)
第一个问题,所以我希望它可以理解!
我正在初始化一个指向复合文字的指针,它是一个结构指针数组。然后我可以像通常使用指针数组一样使用这个指针。
当我稍后尝试遍历这个数组时,我使用 size_t 类型的变量作为循环计数器,并使用 [] 数组表示法访问数组的成员。
当数组大小低于某种大小阈值时,编译器会给出以下警告:(752) 转换为更短的数据类型。向 struct 添加更多成员,或向 struct 数组添加更多成员会删除警告。即.. 在此示例中,初始化数组的另一个成员会消除编译器错误。
此警告似乎指向我使用 size_t 类型的索引访问数组成员的行。似乎编译器用于数组索引的类型不是常量,实际上取决于数组的大小。这使得防止截断或未使用的内存变得非常困难。
我已经在一个全新的项目中编译了这个测试代码,并且行为仍然存在。
我是疯了还是我发现了优化的一些有趣的怪癖?
我的构建环境如下:
- MPLAB X v5.35
- XC8 v2.10
- C 库中的 C99 标准和链接
- 警告级别:-9
- 器件:PIC18F46K20
- 优化:空间(PRO)
c - 复合文字表达式的实际用途?
复合文字的实际应用是什么?我不太确定未命名的存储区域的地址如何有用。
我发现他们在这里提到:https ://en.cppreference.com/w/c/language/compound_literal
c - 如何在函数调用期间声明和传递结构?
在函数调用期间声明和传递基本数据类型变量是很常见的,我们可以用结构实现类似的东西吗?下面的代码更好地解释了我的问题。