如果sizeof(struct ...)不等于给定数字,如何获取C编译器错误?

时间:2019-03-02 16:33:02

标签: c++ c compiler-errors compilation sizeof

如果sizeof(struct ...)不等于给定数,如何获得C编译时间#error?

问题来自编程课程,我想避免运行大小错误的二进制代码。

(众所周知,sizeof运算符在#if .. #endif指令中不起作用。)

3 个答案:

答案 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编译器可用