问题标签 [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 投票
1 回答
3223 浏览

c - 嵌套结构/数组初始化

我有一个包含另一个结构的数组的结构,它看起来像这样:

我现在想在全局范围内初始化它们。它们旨在作为模块的描述。我试图用 c99 复合文字来做到这一点,但编译器(gcc)不喜欢它:

我收到以下错误:

因为我不需要修改它,所以我可以根据需要在其中添加尽可能多的“const”。有没有办法编译它?

0 投票
1 回答
3784 浏览

c - 是否可以(合法)在复合文字中分配匿名联合?

我有一个结构:

当我尝试分配复合文字时,例如:

gcc 给了我一些警告,例如:

好吧,很明显编译器不确定我是否只是将值分配给可能不明确的类型。但是,即使我尝试更精确地指定:

我得到:

我已经读过,如果我把它放在(union <union name>)之前i:,它可能会起作用。但是,我更喜欢匿名工会。有没有办法做到这一点?

0 投票
3 回答
272 浏览

c - 复合文字中使用的强制转换和指针变量中使用的强制转换之间的区别?

考虑以下代码:

为什么复合文字在这里不会产生错误?

0 投票
5 回答
17331 浏览

c - C 复合文字,指向数组的指针

我正在尝试将复合文字分配给变量,但它似乎不起作用,请参阅:

我在 gcc 中遇到错误。

但如果我只写这个:

然后就没事了。

但这不是我想要的。

我不明白为什么会发生错误,因为如果我像数组一样初始化它,或者将它与字符数组的指针一起使用,没关系,请参阅:

注意我不明白为什么我在第一个中出现错误,请我不能,或者我不想像第二种形式那样写,因为它需要是复合文字,我不想说编译器的数组有多大。我想要第二个类似的东西,但是对于 int 值。

提前致谢。

0 投票
3 回答
1021 浏览

c - 复合文字和类似函数的宏:gcc 或 C 标准中的错误?

在 C99 中,我们有复合文字,它们可以传递给函数,如下所示:

但是,如果f不是函数而是类似函数的宏,gcc 会拒绝 this,因为预处理器将其解析为两个参数,而不是一个参数,“ (int[2]){ 1”和“ 2 }”。

这是 gcc 或 C 标准中的错误吗?如果是后者,那几乎排除了所有透明使用类似函数的宏,这似乎是一个巨大的缺陷......

编辑:作为一个例子,人们期望以下是一个符合标准的程序片段:

但是由于fgetc可以实现为宏(尽管需要保护其参数并且不对其进行多次评估),因此该代码实际上是不正确的。这对我来说似乎很奇怪。

0 投票
5 回答
1052 浏览

c - 将复合文字分配给数组指针会在同一地点和时间同时给出预期结果和垃圾?

你瞧(YMMV):

通过指针算术打印该数组表明它确实包含一个 1 到 5 的整数序列,但再次打印据称是通过 indeces 表示的相同数组会给出未初始化的废话。为什么?

0 投票
4 回答
154 浏览

c - IF 语句中的复合文字

我试过这个小代码在 IF 语句中使用复合文字:

它没有用。它在编译时给出了以下消息:

prac.c:15:16:错误:二进制 == 的无效操作数(具有“结构时间”和“结构时间”)

是否不允许在 IF 语句中使用复合文字或语法不正确?

0 投票
3 回答
2982 浏览

iphone - 为什么要使用像 CGRectMake 这样的函数?

我很好奇为什么像 CGRectMake 和 CGPointMake 这样的函数存在并且被广泛使用。相反,您可以这样做:

由于没有函数调用,这肯定会更有效(尽管我猜不是很多)?

您还可以设置原点和大小,如:

并作为混合物:

不使用它并更喜欢 Make 功能的原因是什么?

0 投票
1 回答
306 浏览

c++ - 为什么我需要像临时构造这样的复合文字来初始化我的 std::array 成员?

0 投票
2 回答
125 浏览

c - 复合文字在这段代码中是如何工作的?

我有以下代码,其中我编写了两个函数。两者都旨在产生相同的输出。但是g()具有循环的函数产生的输出与我预期的不同,如下所示。

输出:

为什么调用时的地址p相同g()