【发布时间】:2011-01-10 10:02:17
【问题描述】:
据我了解,在 C 中,int 和 float 等原语在首次声明时被初始化为 0。如果声明的结构包含原语,情况也是如此。我很难找到一种简单的方法来检查基元是否未初始化。
例如,假设我有一个在头文件中声明的 int 类型的实例变量。我需要在我的实现代码中使用这个变量,知道这个值是否已经初始化对我来说很重要。检查零并不是一个真正的选择,因为如果该值确实应该为零,那么我已经重新初始化了一个已经更改的值。检查 NULL 也不起作用,因为它不是指针。
我想出的唯一解决方案是将第一段可执行代码中的变量初始化为某个我知道永远不会与程序的其余部分相关的值。例如,如果该值永远不应低于零,那么我将其初始化为 -1 以知道它尚未初始化。不过,这看起来确实很麻烦,并且如果可以分配变量的值的范围发生变化,可能会导致问题。
对这类问题有什么有趣的建议吗?提前致谢!
【问题讨论】:
-
使用未初始化的变量就是UB。如果您通过开关 -Wall (gcc),您可以跟踪每个未初始化的变量。 gcc 将报告如下内容:
ddd.c:8: warning: ‘i’ is used uninitialized in this function
标签: c methods conventions