如果sizeof(struct ...)不等于给定数,如何获得C编译时间#error?
问题来自编程课程,我想避免运行大小错误的二进制代码。
(众所周知,sizeof运算符在#if .. #endif指令中不起作用。)
答案 0 :(得分:4)
如果sizeof(struct ...)不等于给定数,如何获得C编译时间#error?
您不能,因为预处理程序对类型的大小一无所知。
但是您可以static_assert
:
static_assert(sizeof(T) == N, "T must have size N")
在C中,关键字为_Static_assert
,也可以通过static_assert
中的宏<assert.h>
使用。
答案 1 :(得分:3)
不要。您已经解释了原因。
在现代C ++中,您可以编写:
static_assert(sizeof(T) == 42);
尽管最好编写不关心T
大小的代码。
答案 2 :(得分:0)
#include <assert.h>
//T should have size 10
static_assert(sizeof(T) == 10)
仅最新的C编译器可用