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等
■网友
只能依靠编译器的警告

■网友
是可以把这项功能加入到编译器中的,单独做这么一个功能还不如加入编译器功能中。

但是也只能做到判断在声明时是否初始化,除此之外无论是否初始化那段内存都是有值的
或者似乎也可以修改编译器代码,使得每次初始化写入固定的数值,编译时判断是否为这个固定值?如果是出错。


    推荐阅读