簡體   English   中英

在聲明時強制轉換功能指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM