gpt4 book ai didi

c - 为什么即使我没有返回对象,我的结构也会被清零?

转载 作者:太空宇宙 更新时间:2023-11-04 05:49:57 25 4
gpt4 key购买 nike

我一直在研究一些 C 代码并像这样初始化了一个 cat 结构

typedef struct 
{
int age;
char *name;
char *favoriteQuote;
} Cat;

我创建了两个函数,一个初始化 cat 对象,一个清零内存,看起来像这样

Cat initialize_cat_object(void)
{
Cat my_cat;
my_cat.age = 3;
my_cat.favorite_quote = "A day without laughter is a day wasted";
my_cat.name = "Chester";
return my_cat;
}

Cat destroy_cat_object(void)
{
Cat my_cat;
memset(&my_cat, 0, sizeof(my_cat));
//--forgot to return 'my_cat' here--
}

我的主要功能是这样的

void main(void)
{
Cat my_cat;
my_cat = initialize_cat_object();
printf("Creating cat\n")
printf("Name: %s\nFavoriteQuote: %s\nAge: %d\n", my_cat.name,
my_cat.favorite_quote, my_cat.age);

my_cat = destroy_cat_obect();

printf("CAT DESTRUCTION\n");
printf("Name: %s\nFavoriteQuote: %s\nAge: %d\n", my_cat.name,
my_cat.favorite_quote, my_cat.age);

}

程序的输出是预期的输出 Program output

直到我回到源代码,我才注意到我忘记返回内存被清零的 Cat 对象,但是程序仍然显示预期的输出,但是如果我试图省略 return 语句“initialize_cat_object”函数的数据输出已损坏

enter image description here

我唯一能想到的是“destroy_cat_object”返回清零的内存,但这怎么可能呢?

最佳答案

destroy_cat_object 没有 return 语句。 C11 6.9.1p12说:

If the } that terminates a function is reached, and the value of the function call is used by the caller, the behavior is undefined.


然而,在 C 标准方面,拥有一个具有返回类型但没有在右括号之前有一个return 语句的函数是完全可以的。调用这样的函数也完全OK。

然而,如果函数未以显式返回值的 return 语句终止,则使用函数调用的返回值是不可行的。

如果您没有收到相关消息,您可能希望在编译器设置中启用一些额外的诊断。

关于c - 为什么即使我没有返回对象,我的结构也会被清零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44763184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com