首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-03-15 
如何在编译时自动判断结构长度,超过一定长度编译自动报错?定义了如下的结构:#defineMAX_MSG_LEN0x200typed

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

热点排行