prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 7.7b

Q强制类型转换malloc的返回值有什么问题?


A假设你调用了malloc但忘记了#include <stdlib.h>。编译器可能会假设malloc是一个返回int的函数,这当然是错误的,并将导致问题。现在,如果你的调用malloc的形式是

	char *p = malloc(10);
编译器会注意到你似乎在将一个整数赋值给一个指针,并可能发出一个类似“指针从整数赋值缺少强制类型转换”的警告(参见问题7.6),这会提醒你存在问题。(问题当然是你忘记了#include <stdlib.h>,而不是忘记使用强制类型转换。)另一方面,如果你的调用malloc包含强制类型转换
	char *p = (char *)malloc(10);
编译器很可能会假设你知道你在做什么,你确实想将int返回的malloc转换为指针,因此编译器很可能不会发出警告。但当然malloc并不返回int,所以尝试将它不返回的int转换为指针可能会导致另一种更难追踪的问题。

(当然,编译器越来越可能——尤其是在 C99 下——在调用没有原型在作用域的函数时发出警告,并且这种警告会提醒你缺少<stdlib.h>,无论是否使用了强制类型转换。)


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管