问题标签 [flexible-array-member]
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 - 灵活数组成员的替代方案,无需动态内存分配
我使用灵活的数组成员来定义 USB-String 描述符:
这很有效,并且允许在其他地方定义实际的字符串常量,以便在项目之间轻松更改。但是由于编译器的限制,我不能再使用灵活的数组成员。我想避免硬编码一个字符数组,我基本上只需要在一个宽字符数组的前面添加两个字节。是否有任何巧妙的方法来声明一个数组或一个预处理器宏来实现这一点?
c++ - 没有给定维度的 C++ struct 数组成员(灵活的数组成员?)
我编译并运行了以下 C++ 代码,盲目地尝试创建一个灵活的数组成员,就像在 C 中一样:
代码编译和运行得很好,并给出了与 C 在相同情况下相同的输出(输出 4,然后输出 10)。
现在,根据2010 年的这个答案,我写的应该不是有效的 C++。此外,根据这篇维基百科文章,“C++ 没有灵活的数组成员”。
我的问题是,我在上面的代码中实际使用了哪个 C++ 功能,特别是在“ T ts[];
”那一行?该代码实际上是按照我认为的一般情况执行的,还是未定义的行为?
c - union 是否支持灵活的数组成员?
我在联合中声明了一个灵活的数组成员,如下所示:
并且编译器给出错误:
但是,声明数组大小为零,如下所示:
它工作正常。
为什么零长度数组可以正常工作?
c - Printing address of struct members in flexible member array of structs
I have a struct which contains a flexible member array:
I'm trying to use foo
and bar
as data structures to copy data over to uint8_t buffer[50]
.
Now I would have expected this to print the following (i.e. a contiguous block of memory):
Instead, I'm getting the following:
What am I doing wrong?
c++ - GCC 版本/标志和 FAM
我正在尝试将我们的构建系统从 移植make
到CMake
,但我遇到了一个令人惊讶的问题,该问题令人惊讶地无法“Googleable” 我们的代码是 C++ 11/14,可以使用 GCC6.2 编译,make
调用 GCC 时应用了无数个开关,主要是迂腐警告。我构建了一个CMake
系统,可以毫无问题地编译(GCC 6.3)大部分代码,但由于以下原因,某些模块无法构建
灵活的数组成员 'blahblah' 不在 'struct' 的末尾</p>
除了它出现在 C++ 代码中的原因。为什么要在make
基础系统中编译?AFAIK,灵活数组不是 C++ 标准的一部分。GCC 特定的扩展?什么命令行开关控制 FAM 行为?如何使它像在原始make
系统中一样编译?
如果有人需要一段已编译的代码
要添加更多上下文,cmake
文件
cmake_minimum_required(版本 3.9)
项目(foo 版本 ${FOO_VERSION} 描述“foo”)
设置(CMAKE_CXX_STANDARD 14)
设置(CMAKE_C_STANDARD 99)
add_executable(foo foo.cpp foo_backup.cpp main.cpp)
set_target_properties(foo 属性版本 ${PROJECT_VERSION})
target_include_directories(foo PUBLIC ${CMAKE_SOURCE_DIR}/lib/include ${CMAKE_SOURCE_DIR}/lib/include/bar)
c++ - C++ 动态数组写访问冲突
这已经困扰了我将近 2 天了。我在我的类定义中有一个二维动态数组:
在我的绘图方法中,我有这个循环
谁能指出为什么它是错误的?这是错误消息:“抛出异常:写访问冲突。 这是 0x111013530C28FA2。”
c - 具有灵活数组成员的结构并为其分配内存
我正在阅读维基百科链接的这个版本的 C99 标准,试图了解灵活的数组成员是如何工作的。
在第 6.7.2.1 节中,声明了这个结构:
并举了一个例子:
它在哪里说,s1
并且s2
会表现得好像声明是:
它列出了一些你可以做的事情:
我可以看到为什么上面的最后一行是未定义的,因为s2
只分配了 6 个额外的字节,这不足以存储双精度,但是我不明白为什么它会说s1
and的行为s2
就像它们被声明为:
当似乎s2
没有分配足够的内存来存储该结构时。
该文件似乎是某种草稿,所以我不确定是否有错误或者我是否误解了其含义。
c - C中结构中的二维数组
我正在尝试在结构中初始化二维数组,但总是出现错误:
这是代码:
理想情况下,我想像这样初始化二维数组的高度和宽度:
但是在编译时我得到了另外两个错误:
我到处看了看,但我的代码应该可以工作,但我不知道为什么不能。
谢谢您的帮助
c++ - 包含使用 unique_ptr 的 char 数组的 C++ 对象
我正在寻找一种方法来使用 unique_ptr 来分配一个结构,该结构包含一个 char 数组,其中有多个字节动态设置以支持不同类型的消息。
假设:
如何将下面的 send_message() 转换为使用智能指针?
我尝试使用以下代码使用智能点无法编译:
下面是一个完整的工作示例:
c - 如果编译器定义了 __STDC_NO_VLA__,它还必须支持灵活的数组成员吗?
在 C99 中,灵活的数组成员(结构)和可变长度数组是标准的强制性部分——符合 C99 的编译器(实现)必须同时支持它们。
在 C11 中,允许定义(§6.10.8.3 条件特征宏):
__STDC_NO_VLA__
整数常量 1,旨在表明实现不支持可变长度数组或可变修改类型。
- 该定义是否意味着指定它不支持 VLA 的编译器也被允许不支持§6.7.2.1 ¶3 灵活数组成员- 或者即使没有 VLA 支持, §6.7.2.1 ¶18 灵活数组成员也是强制性的?
我没有在标准中发现任何地方规定具有 FAM 的结构是可变修改类型,所以我认为即使不支持 VLA,也需要 C11 编译器来支持 FAM。支持这种解释的一项:具有 FAM 的结构的大小是固定的;FAM 不计入大小的一部分(而 VLA 的大小不是编译时常数)。