Ограничения на использование строк в объединениях

В Tibbo C объединения не могут включать строковые члены или структуры, среди членов которых есть строки:

struct packet_x{
   unsigned char packet_type;
   string dt(20); //here is a member string
};
packet_x p_x; //a structure with a string member -- this is OK
...
union packet{
   packet_x p_x; //this will generate an error (not a POD-type") -- packet_x has a string member
   ...
};
struct mega_struct{
   packet_x p_x; //this member is a structure with a string member -- this is OK
   ...
};

Причина ограничения в том, что строковые переменные включают метаданные (текущую длину и ёмкость), которые могут стать недопустимыми из-за манипуляций с объединением (например, можно было бы установить текущую длину > ёмкости).

Соответствующая ошибка компилятора выглядит так в панели Output:

(prj)\c.tc(19) : error C1203: invalid union member type: 'struct p_x' is not a POD-type

«POD» означает «plain old data» (простые старые данные). Строки содержат метаданные, поэтому не являются «plain old data».

Исходный материал Tibbo обновлён 12 июля 2022Оригинал на docs.tibbo.com · Сообщить об ошибке