Вы можете обнаружить такие «дыры» с помощью макроса offsetof
:
#include <stddef.h>
struct test {
char a;
int b;
};
...
printf("%zu", offsetof(struct test, b));
Если это печатает больше, чем 1
, b
явно имеет требования к выравниванию, и компилятор создает промежуток между.
Очевидно, что это происходит во время выполнения, а не во время компиляции, но вы можете написать сценарий, который создает аналогичный исходный файл, компилирует и запускает его до остальной части вашего проекта, а затем, основываясь на выводевы принимаете дальнейшие решения о том, как построить свой проект.
Я не думаю, что какой-либо компилятор предоставляет средство для уведомления вас об этом.