问题标签 [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 - 有没有办法让复合文字在 c99 中具有可变长度?
我知道通过正常声明数组可以在运行时确定长度的数组:
而且我知道我可以将数组声明为复合字面量并将其分配给中途的指针:
但是,将两者结合起来不起作用(标准不允许)。
我的问题是:有什么办法可以实现下面代码的效果?(注len
)
谢谢你。
c - 引用的复合数组文字的生命周期
我最近才知道我实际上可以在 C 中使用对复合文字数组的引用,我觉得这很有用,但我不太明白它是如何工作的。
例如,假设我使用该功能来避免必须为调用某个我不关心返回名称长度的套接字接口函数声明一个变量,如下所示:
显然,sizeof(ss)
需要实际存储在堆栈中以便将指向它的指针传递给getpeername
,因此必须为此目的分配和保留堆栈上的空间,但是此分配的生命周期是多少?我可以相信它保持分配状态多久?
查看 GCC 的汇编输出,我观察到如果我将调用放入getpeername
循环中,分配不会在循环的多次迭代中继续存在,但还有哪些其他条件可能导致它不存在?
c - 每次将复合文字分配给循环中的指针时是否都会创建一个新对象?
根据C99 标准6.5.2.5 .9 代码:
将 p 初始化为指向两个整数数组的第一个元素,第一个元素的值为 2,第二个元素的值为 4。此复合文字中的表达式必须是常量。未命名对象具有静态存储持续时间。
但是当我们做这样的事情时会发生什么:
循环的每次迭代都是新unnamed object
创建的,还是每次迭代都使用相同的对象?
如果我们这样做,结果会不会有所不同:
两种可能的选择是:每次循环迭代时创建一个新对象,或者每次循环迭代都使用相同的对象。
我感兴趣的是,这种情况下的行为是否可以从标准中的内容中扣除,还是由编译器决定。
我已经使用以下代码在 gcc 4.1.2 下对其进行了测试:
结果是:
0x7fff4c0010a0 0x7fff4c0010a0 0x7fff4c0010a0 0x7fff4c0010a0 0x7fff4c0010a0 0x7fff4c0010a0 0x7fff4c0010a0 0x7fff4c0010a0 0x7fff4c001010a0x07f4
我写了一些代码来检查caf的答案:
结果是(用 valgrind 调用它来检测内存错误):
因此,文字仅在声明它们的函数内可用,离开函数后超出范围,之后访问它们是未定义的行为。
c - How to determine how many elements there are in an array of compound literals in C?
How can I determine how many elements there are in an array of compound literals. I'm using the well known macro sizeof(a)/sizeof(a[0]);
but keep getting 1
.
c - #定义一个常量结构
假设我有一个结构:
然后我想定义一个无效的位置,以便稍后在程序中使用:
但是,当我在我的程序中使用它时,它最终会出现错误:
这不会编译。以这种方式使用复合文字不合法吗?我得到错误:
二进制表达式的无效操作数(“struct location”和“struct location”)
c - “复合文字”作为参数
调用sum(int [], arr_size)
语句中的函数
复合文字 作为 (int []){1,2,3,4,5}
参数传递。很明显,数组的长度是由字面量元素的数量决定的(当然5
在这里)。那么5
作为另一个参数传递的需要是什么?
我们不能将上面的函数定义为
然后将其称为
?
c - 复合/字符串文字在哪里存储在内存中?
我读到了;
复合文字是 C99 的一项功能,可用于创建没有名称的数组。考虑这个例子:
p
指向包含3, 0, 3, 4
和的五元素数组的第一个元素1
。
实际上我想知道,这个数组是否会存储在内存中,因为它没有名称?
换句话说,如果
字符串"hello"
将存储在内存中的什么位置?
c - 匿名结构 + 复合文字导致 lint 错误
我的嵌入式 C99 兼容程序中有多个结构(仿照微芯片编译器使用的定义类型,尽管这不是微芯片应用程序)。这是一个典型的例子:
CommandDirection_t 和 RigisterAddress_t 是枚举。稍后在我的代码中,我声明并初始化我的结构:
这编译时没有警告或错误,但是当我 lint 文件时,我收到错误:“错误 65:需要一个成员名称”。
如何调整我的代码以不再引发 lint 错误,或者我可以做些什么来禁用 lint 警告(除了禁用错误 65)?
c - 作为参数传递的复合文字的生命周期是多少?
使用 clang 编译时没有警告。
这甚至是有效的C吗?
如果是这样:复合文字的生命周期是多少?
ios - 需要解释奇怪的语法
我按照教程并找到此代码:
它很清楚它的作用,但我不明白这行代码的语法。我第一次看到这样的东西:.size = image.size
。在点语法中,我希望在点前面看到一些东西,比如self.view
,但是 是什么意思.size
?
第二个问题是 - 为什么有圆括号和花括号?我以前从未见过这样的结构(){};
。
我的问题可能听起来很傻,但现在我有点困惑,有人可以解释一下吗?谢谢你。