当我不转换malloc的结果时,为什么编译器会抱怨?

我正在检查不需要显式地转换malloc调用结果的代码,但每当我尝试这样做时,编译器都会抛出错误。

char *somevar; somevar = malloc(sizeof(char) * n); //error somevar = (char *)malloc(sizeof(char) * n); // ok 

如果使用C ++编译器而不是C编译器,则会发生这种情况。 因为C ++需要显式转换。 问题不仅在于(un)转换malloc结果,而是任何指向其他指针的void指针。

你还记得包含function原型吗? 对于malloc(3),这是:

 #include