Я интегрирую некоторый код в свою библиотеку. Это сложная структура данных, хорошо оптимизированная для скорости, поэтому я стараюсь не изменять ее слишком сильно. Процесс интеграции идет хорошо и фактически почти закончен (он компилируется). Меня все еще беспокоит. Я получаю предупреждение C4200 несколько раз:
warning C4200: nonstandard extension used : zero-sized array in struct/union
Cannot generate copy-ctor or copy-assignment operator when UDT contains a zero-sized array
Код работает, но это предупреждение дает мне крипы (особенно часть с копией-ctor). Предупреждение появляется из-за структур, объявленных следующим образом:
#pragma pack( push )
#pragma pack( 1 )
// String
struct MY_TREEDATSTR
{
BYTE btLen;
DWORD dwModOff;
BYTE btPat[0];
};
typedef MY_TREEDATSTR TREEDATSTR;
typedef MY_TREEDATSTR *PTREEDATSTR;
#pragma pack( pop )
Обратите внимание на btPat[0]
. Есть ли способ, как легко и правильно избавиться от этого предупреждения, не нарушая код и/или слишком сильно меняя его. Обратите внимание на #pragma
, имеет ли какое-либо значение в соответствии с этим предупреждением? И почему структура объявлена таким образом в любом случае? (Я имею в виду btPat
вещь, а не #pragma
, я понимаю).
Примечание: я видел этот похожий вопрос, но мне это действительно не помогло.
Обновление: как я уже сказал, код работает и дает правильные результаты. Поэтому оператор-копир или оператор присваивания, по-видимому, действительно не нужен. И поскольку я смотрю на код, ни одна из структур не получает memcpy-ed.