Как получить время компиляции C#error, если sizeof (struct ...) не равен заданному числу?
Вопрос из курса программирования, где я хотел бы избежать запуска двоичного кода размера промаха.
(Оператор sizeof, как мы знаем, не работает в директиве #if .. #endif.)





Не надо. Вы уже объяснили, почему.
В современном С++ вы можете написать:
static_assert(sizeof(T) == 42);
Хотя лучше писать код, который не забота каков размер T.
How to get C compile time #error if a sizeof(struct ...) not equal to a given number?
Вы не можете, потому что препроцессор ничего не знает о размерах типов.
Однако вы можете static_assert:
static_assert(sizeof(T) == N, "T must have size N")
В C ключевое слово _Static_assert, также доступное через макрос static_assert в <assert.h>.
#include <assert.h>
//T should have size 10
static_assert(sizeof(T) == 10)
Доступен только последний компилятор C
Подробности:
_Static_assertдоступно с C11. Последний C: С18