概述:
在工作中,设备的配置文件是一个大的结构体保存到flash中,这个结构体各个已用的参数偏移是不能改动的(参数很多很复杂),如果改动就会影响后面的设备,导致一系列问题,故参考了网上的资料,写了一个简单例子,用于学习。保证了我们保存flash的结构体不会被不经意改变,导致出问题。
实例demo:
#include <stdio.h>
#include <stddef.h>
/* 编译阶段检测结构体的大小是否等于特定值 */
#define SIZE_OF_TYPE_EQUAL_TO(type, size) \
static inline char size_of_##type##_equal_to_##size() \
{ \
char __dummy1[sizeof(type) - size]; \
char __dummy2[size - sizeof(type)]; \
return __dummy1[-1] + __dummy2[-1]; \
}
/* 编译阶段检测结构体成员在结构体的偏移是否等于特定值 */
#define OFFSET_OF_TYPE_EQUAL_TO(type, member, size) \
static inline char OFFSET_of_##member##_in_##type##_equal_to_##size() \
{ \
char __dummy1[offsetof(type,member) - size]; \
char __dummy2[size - offsetof(type,member)]; \
return __dummy1[-1] + __dummy2[-1]; \
}
//8bytes
typedef struct
{
int