c - C99/C11 自引用子对象初始化可能吗?
问题描述
我首先应该说我认为我想做的事情是不可能的(已经阅读了我认为是 ISO C99 的相关部分)但这里是我现在所拥有的粗略概念:
struct foo {
int x;
int *y;
};
#define FOO_INITIALIZER(name) \
{ \
.x = 1, \
.y = &(name).x, \
}
struct foo bar = FOO_INITIALIZER(bar);
这在 C99/C11 中有效,但我真正想要的是将 name 参数放到 FOO_INITIALIZER 宏中。那可能吗?
我知道这不起作用:
#define FOO_INITIALIZER \
{ \
.x = 1, \
.y = &.x, \
}
如果可能的话,我应该查看 ISO/IEC 9899:TC3 的哪个部分?
解决方案
没有办法在标准 C 语言中实现您想要的。如果有意义(高度依赖于应用程序),您可以继续传递名称(但这对于嵌套对象不起作用)或存储偏移量而不是指针(高度依赖于应用程序)offsetof
。
推荐阅读
- javascript - 如何在按钮单击时更新 useEffect() 挂钩的值
- sql - BigQuery 在 Firebase 函数中无法正常工作
- selenium - 使用 beautifulsoup 获取 div 标签中的 alt 值
- ffmpeg - 在 FFmpeg 中映射不同的流,这是相同的吗?和工作?
- django - Django Rest Framework - Html 渲染器坏了?
- html - 如何改变前一个元素的样式值
- python - 如何创建正则表达式来查找 URL 内的两个文件夹中的文件?
- clojure - 这个 Clojure 宏扩展是如何工作的?
- openlayers - 如何在交互修改中更改蓝点样式
- java - 继续单击 TextView 上的另一个活动和/或片段