C/C++编程教训----数据结构的类型别名和memset

来源:互联网 发布:淘宝紫砂壶店铺 编辑:程序博客网 时间:2024/05/22 14:17

问题描述

学习微软,我们经常会这样定义数据结构, 并且定义了数据结构别名StructTest,和数据结构指针别名LPStructTest, 这样定义也许让程序的类型更加简洁。

typedef _StructTest{    int iVal;    char csStr[100];}StructTest, *LPStructTest;

数据结构变量定义一般使用StructTest sTest这种形式,如果数据结构指针则用LPStructTest pTest

StructTest sTest;LPStructTest pTest = &sTest;

下面说说博主碰到的坑,如下代码,定义了一个数据结构变量sTest,用调用的memset初始化数据结构的内存为0也许你一下子就看出来错误,数据结构的大小,应该用sizeof(StructTest)而不是sizeof(LPStructTest)。 这时候你的程序也许会因为非完全的初始化,导致其出现一些未知的执行结果了。因为名字相似,代码审查也不太容易发现

StructTest sTest;memset(&sTest, 0, sizeof(LPStructTest));

这种低级错误怎么会发生呢,主要现在的编译器或者插件都带有联想提示的功能,比如当你用键盘敲打了Test,这时候会联想出来StructTestLPStructTest,当你在频繁使用这种方法的时候难免有一次会不小心选成了LPStructTest。当然锅不能甩给IDE或者插件了,要从自身找原因。

避免问题

本文的宗旨是,尽可能的通过编程习惯,去避免掉这些低级错误。个人建议有两个:
1. memset调用的时候,重置的内存的大小使用变量的sizeof结果,比如sizeof(sTest)
2. 如果再小心一点,就是尽量不要定义像上文提到的LPStructTest这种类型别名。

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 给宝宝吃奶被吃到奶头裂开怎么办 宝宝吃奶奶头裂开了怎么办 小孩吃奶奶头裂开了怎么办 站久坐久腰酸痛怎么办 孕39周胎儿头小怎么办 怀孕腰两侧长肉怎么办 怀孕四个月半月吃点就饱怎么办啊 怀孕四个月睡眠不好怎么办 二胎七个月肚子太大怎么办 上火牙疼牙龈肿怎么办 孕30周乳房胀痛怎么办 怀孕长妊娠纹了怎么办 坐久了肚子胀疼怎么办 怀孕后胖的太快怎么办 怀孕牙齿全坏了怎么办 怀孕脸胖了好多怎么办 孕晚期不爱吃肉怎么办 怀孕期间胖了怎么办啊 孕期长得太胖怎么办 狗吃马肉脸肿了怎么办 狗过敏了脸肿了怎么办 孕初期外阴很痒怎么办 怀孕了吃了田鸡怎么办 孕妇睡眠质量差怎么办吃什么 39周2天了还不生怎么办 孕中期体重猛长怎么办 4个半月胎位不正怎么办 41周不产生宫缩怎么办 生完孩子胎盘没有脱落怎么办 39周还是臀位怎么办 怀孕7个月胎位不正怎么办 怀孕六个多月胎位不正怎么办 怀孕七个月了胎位不正怎么办 怀孕七个月胎位不正怎么办 怀孕肚子上有妊娠纹怎么办 怀孕九个月肚子长痱子怎么办 怀孕前体重偏胖怎么办 怀孕打胰岛素血糖控制不好怎么办 孕后期憋的难受怎么办 怀孕6个月不想生怎么办 孕六个月不想要怎么办