可能重复:
Do I cast the result of malloc?
Should I explicitly cast malloc()'s return value?
您好,
gcc 4.4.4 c89
通常我不会从malloc调用中转换返回结果。
int *int_ptr = NULL;
int_ptr = malloc(sizeof(int));
但是,我在这里读到,如果你施放它可以隐藏错误。如果显式转换为int,它如何隐藏错误?
int_ptr = (int*)malloc(sizeof(int));
另外,我正在阅读一本c编程书,声称从包含来自malloc的调用的void指针进行强制编程实践。
哪种编程习惯很好?
int *int_ptr = NULL;
void *ptr = NULL;
int_ptr = ptr;
或
int_ptr = (int*)ptr;
非常感谢任何建议,
答案 0 :(得分:3)
如果你如何隐藏错误 显式转换为int?
在您致电stdlib.h
之前,它可以隐藏忽略包含malloc
的错误。如果没有正确的函数声明,C编译器可以假设它返回int
,并且显式强制转换将掩盖您没有正确调用malloc
的事实。请参阅comp.lang.c常见问题解答中的Q7.6和Q7.16。
另外,我正在阅读c编程 那本书说它很好 编程实践从一个 void指针包括来自的调用 的malloc。
这将是一个很好的编程 练?
没有必要在C中显式地转换malloc
的结果。它可能会掩盖错误,并且会增加维护负担(如果您决定更改分配的类型,那么现在您有一个额外的站点必须改变的代码。)
唯一一次应该从void*
执行显式转换,这样你是否会将代码编译为C ++,因为C ++不允许将其作为隐式转换。 (但是如果你正在编写C ++代码,那么在这种情况下你应该使用static_cast
。)
答案 1 :(得分:1)
除非要让GCC在您的环境中保持安静,或者是由同事强制要求等,否则不要强制void*
返回值malloc()
。
投射或不投射,void*
只是一个记忆地址。将它分配给具有类型的变量赋予它意义,并且避免强制转换使代码更容易阅读。