[英]Function Pointer cast at declaration
在尋找有關calloc的信息時,我在源代碼中創建了:
char *malloc();
在calloc函數中。
它是否將void * malloc(size_t)轉換為返回char *的函數指針?
此語法不適合我編譯。
在過去,在ANSI C提供void *
作為通用指針類型之前, char *
用於此目的。
該代碼來自Unix 7版 ,該版本於1979年發布(在ANSI C之前)。
這就是為什么必須在舊的ANSI前代碼中malloc()
的返回值 。
參考: C常見問題解答
這來自一些非常古老的源代碼。 您正在查看1979年發布的UNIX Version 7中的代碼。從那時起C語言發生了重大變化。
這不是演員; 這是一個功能聲明。 強制轉換由帶括號的類型名稱后跟表達式組成,例如(int)foo
。
此外,它是一個舊式函數聲明,一個非原型,不指定參數的類型。 (不過,它仍然是有效的語法。)
它聲明malloc
是一個返回char*
類型結果的函數。 (它沒有定義 malloc
函數;必須在其他地方完成。)
在現代C(自1989年以來)中, malloc
返回void*
類型的結果並且具有size_t
類型的單個參數,因此聲明將是:
void *malloc(size_t);
但該聲明由標准的<stdlib.h>
標頭提供,因此不需要自己提供聲明。
在其他函數中包含函數聲明是合法的 ,但它很少是一個特別好的主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.