在使用 GCC 编译时-Wall
,GCC 会警告使用可能未初始化的变量。if
但是,作为程序员,我知道如果控制进入某个语句,则必须初始化一个变量:
int foo;
/* conditional assignment of foo goes here */
if (/* complicated condition that guarantees that foo has been initialized */){
return test(foo);
}
在上面的代码中,GCC 会抱怨foo
可能未初始化使用。test()
特别是,抱怨将来自foo
实际使用的定义内部。
是否有内置的 GCC 或等效项来告诉编译器foo
已经初始化?例如:
if (/* complicated condition that guarantees that foo has been initialized */){
__assume_initialized(foo);
return test(foo);
}
请注意,放置#pragma GCC diagnostic ignored "-Wuninitialized"
在该行之前return test(foo)
是不够的,因为未初始化的警告是由 foo 的定义中的使用(例如比较)引起的test()
,可能在另一个编译单元中,其中 pragma 不存在。
我也不想将编译指示放在 的定义中test()
,因为问题不在于test()
. test()
当然不应该用随机垃圾调用,并且将 pragma 放在那里可能会导致其他错误被忽视。
有什么解决办法吗?