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

c - 复合文字的存储时间

我不知何故无法理解块中定义的复合文字的存储持续时间是如何自动的,推理如下:

让我们假设复合文字是在重复调用的函数或块中定义的;当第一次调用这个函数时,如果它不是在静态内存中,计算机如何创建文字?(我的意思是他怎么知道它的价值??例如它是 (int [2]) {2,4} 还是 (int [5]) {5,4,2,1,4}),如果它不知何故存在于任何地方,计算机如何再次知道它的内容?(当他试图为第二次和每一次后续调用再次构建它时)在它第一次传递之后。

其他文字(例如字符串文字和普通文字)的情况是它们位于静态内存中,这是非常合理的,因为如果计算机没有将这个值存储在某个地方,他怎么能知道它的值。

任何人都可以向我正确解释这个吗?

0 投票
1 回答
169 浏览

c - 将结构数组作为复合文字传递给函数

我有一个数组声明,我用一些初始值初始化了数组的所有元素。

我现在想“即时”/按需创建数组的成员,而不必静态分配所有成员。

test_t test_array[10] = {0, 0, 0, 0, 0}; //Array initialized func((uint32)&((test_t []){1, 2, 3, 4, 5});//Pass address of array member (created on demand)

使用 arm 编译器进行编译,它给了我一个“不允许不完整类型”的错误。

复合文字的语法是否错误?谢谢!

0 投票
2 回答
360 浏览

c - 指向复合字面量指针数组的 C99 指针

注意:我正在Ideone上积极摆弄这个。

我有一个(自我参照)结构:

并想使用复合文字作为inhibits指针的目标。类似的东西

这可以按如下方式完成,但我希望了解类型规范,以便可以使用复合文字。

上面替换的适当类型规范是什么<type>

0 投票
1 回答
143 浏览

c - 标量类型的复合文字

由于c99复合文字可用于例如初始化指针:

虽然这通常用于structs 它也可以用于初始化匿名数组(参见示例)。但是,如果我理解正确地初始化这样的标量指针:

也是有效的。我觉得令人困惑的是gcc网站上的声明“标量类型和联合类型的复合文字也是允许的,但是复合文字相当于强制转换。” 它们是否仅仅意味着&在匿名标量前使用地址运算符是一种强制转换形式?

0 投票
5 回答
6467 浏览

c - c99中的静态结构初始化

GCC在in 中使用复合文字进行静态结构初始化时,我遇到了一个奇怪的行为c99/gnu99模式

显然这很好:

然而,这不是:

这会触发以下错误:

初始化元素不是常量

这也无济于事:

我确实理解静态结构的初始化值应该是编译时常量。但我不明白为什么这个最简单的初始化表达式不再被认为是常量?这是由标准定义的吗?

我问的原因是我遇到了一些在 gnu90 模式下用 GCC 编写的遗留代码,它们使用这种复合文字构造进行静态结构初始化 (2)。显然,这在当时是一个 GNU 扩展,后来被 C99 采用。

现在它导致成功编译的代码GNU90既不能编译,C99也不能编译GNU99不能编译。

他们为什么要这样对我?

0 投票
4 回答
68 浏览

c - 用于在 C 中的其他函数中分配数组的函数

使用函数在另一个函数中分配数组时遇到问题。这是导致问题的部分:

使用 gcc 编译并执行后,我得到输出:

printf()不知何故,数组分配后的值变得随机,如果我在打印数组值之前添加一些函数,甚至会改变some_function()

0 投票
1 回答
178 浏览

c - 如何迭代复合文字数组

​如何遍历复合文字数组以便打印book_idand value

0 投票
1 回答
213 浏览

c - 如何使用复合文字来“fprintf()”具有任意基数的多个格式化数字?

我想将多个数字转换为某种表示形式,然后使用*printf()说明符的标志、宽度和精度。首选是避免全局或static缓冲区。关键问题似乎是如何char[]为每个转换后的数字提供一个?

如何使用 C11 复合文字来解决这个问题?
如何使用 C99(或更高版本)复合文字来解决这个问题?

0 投票
1 回答
1650 浏览

c++ - 为什么复合文字到目前为止还不是 C++ 的一部分?

我知道 C 和 C++ 是由不同委员会标准化的不同语言。

我知道像 C 一样,效率从一开始就是 C++ 的主要设计目标。所以,我认为如果任何功能不会产生任何运行时开销并且如果它是有效的,那么它应该被添加到语言中。该C99标准有一些非常有用和有效的特性,其中之一是复合文字我在这里阅读编译器文字。

下面是一个展示复合文字使用的程序。

struct Point因此,由于使用了复合文字,因此不会创建注释中提到的额外类型对象。那么,它是否有效,因为它避免了复制对象的额外操作的需要?那么,为什么 C++ 仍然不支持这个有用的特性呢?复合文字有什么问题吗?

我知道一些编译器喜欢g++支持复合文字作为扩展,但它通常会导致不可移植的代码并且该代码不是严格符合标准的。是否有任何建议将此功能添加到 C++ 中?如果 C++ 不支持 C 的任何特性,那么它背后一定有一些原因,我想知道这个原因。

0 投票
1 回答
1434 浏览

c - 字符串文字和 const char[] 或 char[] 之间的区别

假设我有这个C代码

在所有三种情况下,hello都被复制到函数中。指向 char 数组第一个字符的指针被初始化为函数参数。

我知道在 C 中,字符串文字对应于,char []而在 C++ 中,字符串文字对应于const char [],但它会创建与 with 相同的代码吗char []const char []

在 C 程序中,你能交换所有出现的"string"with(char []){ "string" }并在汇编级别得到相同的结果吗?