如何在编译时自动判断结构长度,超过一定长度编译自动报错?
定义了如下的结构:
#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;
}