可能的重复: 我投马洛克的结果了吗? 应该显式地转换malloc()的返回值吗?
你好,
gcc 4.4.4 c89
通常,我不会从malloc调用中转换返回结果。
int *int_ptr = NULL;
int_ptr = malloc(sizeof(int));然而,我在这里读过,如果你抛出它可以隐藏错误。如果显式转换为int,它如何隐藏错误?
int_ptr = (int*)malloc(sizeof(int));另外,我读了一本c编程书,书中说从一个空指针(包括malloc的调用)进行转换是很好的编程实践。
哪个是好的编程实践?
int *int_ptr = NULL;
void *ptr = NULL;
int_ptr = ptr;或
int_ptr = (int*)ptr;非常感谢你的建议,
发布于 2010-08-07 08:35:57
如果显式转换为int,它如何隐藏错误?
它可以隐藏在调用stdlib.h之前忽略包含malloc的错误。如果没有正确的函数声明,C编译器可以假设它返回一个int,而显式强制转换将掩盖您没有正确调用malloc这一事实。参见comp.lang.c常见问题中的Q7.6和Q7.16。
另外,我读了一本c编程书,书中说从一个空指针(包括malloc的调用)进行转换是很好的编程实践。 哪个是好的编程实践?
在C中显式地转换malloc的结果是没有意义的,它可能会掩盖错误,并且会增加维护负担(如果您决定更改分配的类型,那么现在代码中有一个必须更改的额外站点)。
只有在从void*执行显式强制转换时,才需要将代码编译为C++,因为C++不允许将其作为隐式强制转换。(但如果您正在编写C++代码,则应该在本例中使用static_cast。)
发布于 2010-08-07 06:03:33
不要转换void*的malloc()的返回值,除非它是为了让GCC在你的环境中保持安静,或者如果它是由同事授权的,等等。
无论是否强制转换,void*只是一个内存地址。将其赋值给带有类型的变量会给它带来意义,避免转换会使代码更容易阅读。
https://stackoverflow.com/questions/3429288
复制相似问题