如果我尝试返回一个未初始化的变量,它会保证该值始终为null /零吗?
例如:
struct Rect rect_with_zero_value(){
struct Rect aRect;
return aRect; // Will `aRect` always contain 0 value inside the C struct?
}
void * nullPointer(){
void * pointer;
return pointer; // Will `pointer` always be `Null`?
}
更新
我找到了一种方法来确保返回值对于除void
类型之外的任何返回类型始终为null / 0:
#define returnNullValue(ReturnType) \
ReturnType retVal; \
memset(&retVal, 0, sizeof(ReturnType)); \
return retVal
struct Rect rect_with_zero_value(){
returnNullValue(struct Rect); // Return a rect struct which contains 0 value.
}
void * nullPointer(){
returnNullValue(void *);
}
因为我正在使用C宏进行元编程,所以我需要找到一种通用方法来确保返回值始终为null / 0(如果不是)。我认为这是解决方案。不是吗?
答案 0 :(得分:3)
没有。它们不是零。
初始化时,只有静态和全局变量的值为零,例如:
void * nullPointer(){
static void * pointer;
return pointer; // Now pointer is null
}
或
void *pointer; //pointer is null
void * nullPointer(){
return pointer;
}
答案 1 :(得分:2)
如果我尝试返回一个未初始化的变量,它会保证该值始终为null /零吗?
不,至少不是C。
此外:返回一个未初始化的变量会隐含地引发Undefined Behavior,因为返回值意味着读取(local和uninitialised)变量,这反过来会激发UB。
始终在定义上初始化变量:
struct Rect rect_with_zero_value() {
struct Rect aRect = {0};
return aRect;
}
void * nullPointer() {
void * pointer = NULL;
return pointer;
}
如果您不知道将变量初始化为哪个值,则根本不需要它们。
答案 2 :(得分:1)
没有。如果它有保证值,它将被初始化。
未初始化的变量包含半随机垃圾。