gpt4 book ai didi

C++11 可变大小 POD 结构

转载 作者:搜寻专家 更新时间:2023-10-31 01:45:04 25 4
gpt4 key购买 nike

我正在用 C++ 11 编写低级数据操作代码,我想在结构的末尾使用灵活数组的一个古老的 C 特性 (see some info here)。

struct variableCell
{
/**
* @brief Size in bytes of following data.
*/
std::uint32_t cellSize;

/**
* @brief Data stored in overlay.
*/
std::uint8_t cellData[];
};

一旦我将 GCC 与参数一起使用

-Wall -pedantic -std=c++11

我明白了

xxx.h:xx: warning: ISO C++ forbids zero-size array 'variableCell' [-Wpedantic]

这曾经是一个完全正确的功能。请不要告诉我我的方法是错误的 - 它一直是低级数据操作的正确方法。

为什么标准对此进行了更改以及如何仅禁用这一特定警告?

谢谢

编辑:抱歉,我误认为 C 的唯一特性变成了 C++ 不包含的异常之一。我会考虑使用不同的方法。但出于我的好奇心,哪些编译器允许将其作为非标准扩展以及如何让它们在没有警告的情况下接受它?

谢谢

最佳答案

作为引用Incompatibilities Between ISO C and ISO C++ Flexible array members 部分中的状态:

C++ does not support flexible array members.

(This feature might be provided as an extension by some C++ compilers, but would probably be valid only for POD structure types.)

gcc does support this as an extension以及clang .显然这也适用于 Visual Studio - see it live如果你不使用 /Za 我可以找到除此之外的任何文档 post by Stephan T. Lavavej .

我认为没有可移植的方法来消除警告,但类似 ​​Partially disable pedantic warnings in gcc within source 的东西应该适用于 gcc

关于C++11 可变大小 POD 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22608208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com