c语言能否用代码实现判断某局部变量是否已初始化,以防止未初始化使用而编译出错
开启警告当作错误,这是一个好习惯!
■网友
用代码做不到
【c语言能否用代码实现判断某局部变量是否已初始化,以防止未初始化使用而编译出错】 这点小问题处理好编译器警告就差不多了
■网友
首先,题目有点问题。在目前主流C编译器中,使用未初始化变量都不会有编译错误,顶多是警告。但是可惜警告做得并不完善。
刚才我写了一个小程序,使用了 gcc -Wall test.c 编译,很可惜,没有检查出来:#include \u0026lt;stdio.h\u0026gt;void test_case1() { int x = x; printf("%d\", x);}void test_case2(int cond) { int x; if (cond \u0026gt; 1) { x = 100; } printf("%d\", x);}int main(int argc, char *argv){ test_case1(); test_case2(argc); return 0;}其它编译器没试过。这说明编译器内置的未初始化变量警告逻辑做的不完善。设计一个工具把这类问题完全检查出来是没问题的,不存在技术上的难点。
推广一下,商业静态检查工具比如Coverity是可以查出来的。
像上面这些问题,Rust编译器是可以检查出来的。
■网友
目前主流的各大编译器已经具备此功能,比如MSVC, GCC, Clang等
■网友
只能依靠编译器的警告
■网友
是可以把这项功能加入到编译器中的,单独做这么一个功能还不如加入编译器功能中。
但是也只能做到判断在声明时是否初始化,除此之外无论是否初始化那段内存都是有值的
或者似乎也可以修改编译器代码,使得每次初始化写入固定的数值,编译时判断是否为这个固定值?如果是出错。
推荐阅读
- 汽车知识|押宝全新造型,东风雪铁龙新C5能否成为神龙公司“救世主”
- OC为何跌出语言榜前十
- 中国版Evan能火吗美国9岁男童录制评测玩具视频年入800万,中国能否复制成功
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 人民车市|新语言、新起点,捷达VS7 强势入局
- 汽车市场|中期改款再战D级车市场,新雷克萨斯LS能否超过宝马7系等对手?
- 怎样对别人的代码进行适当修改使他永远也找不到问题出在哪
- 澎湃汽车圈|试驾名爵MG领航 运动性和实用性能否兼顾?
- 天天汽车|超高性价比实力宠粉,2021款奕歌能否点燃你的心?
- 能否推荐一个能用快播看电影且电影都是中英双字幕的网站
