读书人

怎么在编译时自动判断结构长度超过一

发布时间: 2012-03-15 11:50:38 作者: rapoo

如何在编译时自动判断结构长度,超过一定长度编译自动报错?
定义了如下的结构:
#define MAX_MSG_LEN 0x200
typedef struct
{
WORD wLen;
char Info[MAX_MSG_LEN];
}MsgInfo;

#define MAX_DATA_LEN 0x100
typedef struct
{
DWROD dwDataSize;
char Data[MAX_DATA_LEN]
}DataBuff;


memcpy(pDataBuff-> Data,pMsgInfo-> Info,MAX_MSG_LEN);

执行结果肯定是拷贝越界。
现在问题是如何让编译器来报告长度错误?




[解决办法]
#define Mmemcpy(des,src) memcpy((char*)des,(char*)src, sizeof(des)> (sizeof(src)?sizeof(des):sizeof(src)));
[解决办法]
下面的代码在条件不满足时可以报编译时错误,就是错误有点难看,嘿嘿。

template <bool val>
struct Test{
};
template <>
struct Test <true> {
static inline bool test() { return true; };
};

struct A {
int a[10];
};

int main() {
Test <(sizeof(A) < 20)> ::test();
return 0;
}

读书人网 >C语言

热点推荐