Как правильно исправить предупреждение «массив нулевого размера в структуре / объединении» (C4200), не нарушая код?

Я интегрирую некоторый код в мою библиотеку. Это сложная структура данных, хорошо оптимизированная для скорости, поэтому я стараюсь не слишком ее изменять. Процесс интеграции идет хорошо и фактически почти завершен (он компилируется). Одна вещь все еще беспокоит меня. Я получаю предупреждение 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

Кодработает но это предупреждение заставляет меня ползти (особенно часть с copy-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.

Ответы на вопрос(6)

Ваш ответ на вопрос