Просто отключите предупреждение (или - ну, не включайте его, я не знаю ни одного набора предупреждений, такого как -Wall
или -Wextra
, который включает его).-Wpadded
не всегда должен быть включен, если вы не хотите всегда вручную указывать необходимые отступы.
-Wpadded
Предупреждать, если в структуру добавлено заполнение, либо для выравнивания элемента структуры, либо для выравнивания всей структуры. Иногда , когда это происходит, можно изменить поля структуры, чтобы уменьшить заполнение и, таким образом, уменьшить структуру.
(выделение добавлено)
Это один случай, когда это невозможно.long double
равен 10 байтам и требует выравнивания 16 байт (4 в x86 Linux);QString
фактически является указателем, поэтому ему требуется выравнивание 8 байтов (4 в 32-битной Linux).Вы можете поменять их местами так, как хотите, но если вы хотите сохранить естественное выравнивание (и, следовательно, наилучшую производительность), вы получите либо 6 + 8 байт заполнения, либо 8 + 6 байт заполнения.
В общем,добавление отступов не является проблемой, происходит постоянно, и есть случаи, подобные этому, когда это неизбежно.Общее правило, как минимум, это размещать элементы в порядке уменьшения требований к выравниванию, но, опять же, этого не всегда можно избежать.
Как упомянуто выше, единственная альтернатива (сохранение хорошего выравнивания) - сделать заполнение явным, но это не имеет особого смысла (если вы не разрабатываете формат файла или что-то и не хотите сделать все явным,но в этом случае вы бы не использовали QString
и упаковали бы в 1 байт).
struct stance {
long double interval;
char unused0[6];
QString name;
char unused1[8];
};