问题标签 [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.

0 投票
2 回答
97 浏览

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-expressionlvalue conversion它不再是左值。

0 投票
1 回答
655 浏览

c - 函数调用中的花括号在 C 中是什么意思?

我尝试解决 K&R C 书中的练习 1-24,您必须在其中创建一个可以检测基本语法错误(不平衡括号、方括号等)的程序。我运行了一些测试以在分散在我系统上的 C 源文件上对其进行调试。我的程序在文件中遇到此行时检测到错误:

我做了一个假设,每次遇到常规大括号(外部注释、双引号)时,括号和括号必须保持平衡。正如此错误所示,这不是真的。不幸的是,我找不到它的含义。谢谢你的帮助。

0 投票
2 回答
185 浏览

c - 初始化包含数组的结构

我在 C 中有一个结构,其成员是浮点数组。我想在编译时初始化它,如下所示:

但我得到编译错误。

一种可能的解决方案可能是在结构中使用数组而不是指针。这是来自此处的一个非常相似的问题的公认答案:https ://stackoverflow.com/a/17250527/1291302 ,但这种方法的问题是我不知道 typedef 时的数组大小。不仅如此,我可能还想初始化另一条更大的曲线。

另一种方法可能是使用 malloc,但我发现这种做法有点过头了,因为我在编译时就知道数组大小,而且我不需要在运行时更改它。

我不知道其他可能有用的方法。也许将数组转换为指针?- 我真的不知道我会如何处理。

0 投票
1 回答
42 浏览

c - 如何使用由复合文字定义的结构的成员?

我找到了这段代码,它使用了一个指向由复合文字构成的结构的指针:

我的问题是:

  • 用于修改和/或评估j++的有效表达式如何?ix
  • 我怎样才能访问会员ix?的指针偏移量p
0 投票
3 回答
147 浏览

c - 将复合文字传递给函数是否有效?

我有一个结构类型作为参数,需要将它传递给函数。

整个代码如下:

如果我在 for 循环中调用 insert,它将打印 .....->3->3->3....(无法停止)

但是,如果我只是将 for 循环替换为

它会正常运行。我想知道我的 for-loop 版本代码发生了什么。

0 投票
1 回答
77 浏览

c - 为什么有人会定义这样的指针?

我不太明白,因为我想不出只有一个“*”而不是 2 个我无法完成的任何事情。

做这样的事情的主要关注点/优势是什么?

0 投票
1 回答
94 浏览

c - 使用 _Generic 宏和复合文字修复 gcc 警告

我有一个带有联合和枚举的结构。我制作了一个宏,它输出结构的复合文字,根据传递给宏的类型设置联合的种类和数据使用_Generic。

示例代码:

它确实使用 gcc 编译,然后正确运行它输出:

但是我得到了所有这些编译警告:

我尝试在复合文字中进行强制转换,如下所示:

但我收到不同的警告:

0 投票
2 回答
162 浏览

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)

示例项目

0 投票
3 回答
75 浏览

c - 复合文字表达式的实际用途?

复合文字的实际应用是什么?我不太确定未命名的存储区域的地址如何有用。

我发现他们在这里提到:https ://en.cppreference.com/w/c/language/compound_literal

0 投票
1 回答
79 浏览

c - 如何在函数调用期间声明和传递结构?

在函数调用期间声明和传递基本数据类型变量是很常见的,我们可以用结构实现类似的东西吗?下面的代码更好地解释了我的问题。