簡體   English   中英

typedef A(* AF)()是什么意思?

[英]What does typedef A (*AF)() mean?

我的主要編程語言是最近開放源代碼。 為了改進它,我正在研究用C編寫的源代碼。

但是自從我讀或寫C以來已經很長時間了(!),那時我甚至都不擅長。 而且這種特殊代碼庫的編寫方式是……特質的(許多APL解釋器,其中的J都以高級“ APL風格”編寫了源代碼,即使是用低級語言編寫的;也避免了簡潔,冗余) ,大量使用宏等)

目前,我正在嘗試了解其采用的基本數據結構。 最基本的一個是typedef A (“ A”代表“ 數組 ”):

typedef struct {I k,flag,m,t,c,n,r,s[1];}* A;

我知道很好。 但是我在兩行之后努力地將注意力集中在什么是AF上:

typedef A (*AF)();

這個語法是什么意思? 特別是,以后將事物聲明為“ AF型”是什么意思? AF是否只是指向A的指針?

我的近期目標是解釋內存轉儲,其中包括類型V (對於“ 動詞 ”)的對象,其前兩個成員是AF

typedef struct {AF f1,f2;A f,g,h;I flag,mr,lr,rr,fdep;C id;} V;

但我的總體目標遠不止於此,因此請詳細說明AF定義中使用的語法。

AF是函數指針的typedef。 具體地說, AF指向指向函數的指針,該函數采用未指定數量的參數並返回類型A的結果。

如前所述, AF數組函數 )是指向返回A數組對象指針)的函數的指針。

V動詞 ,即功能對象)的定義中,有兩個AF v1是指向Monadic函數實現的指針,而v2是指向二元函數的指針。 如果V代表一個運算符(副詞),則v1v2仍分別是單子和二元實現,但是f gh也可以用來保存(咖喱)左和/或右參數。 mr lrrr分別為monadic級,左級和右級。 而且id擁有一個操作碼,因此仍然可以從結構中恢復可打印的表示形式。

如果f gh中的任何操作數本身都是動詞,則它們的V結構將對於* g和h分別位於* f之后的f-> k字節,就像所有“有效載荷數據”一樣。

我發現對於理解J實現中的基本類型非常有用的鏈接是Roger Hui BAA的談話記錄 (2.69M掃描pdf)。 全文寫在J的實現 (html)。

您可能還會發現我的原始克隆具有指導意義。 也可以在這里這里查看我的問題。

讓我們忽略A實際含義。 然后你有

typedef int (*AF)();

AF是指向函數的指針(又稱函數指針),該函數采用任意數量的參數並返回int 顯然,用int替換A ,除返回類型外,內容基本相同。 因此,最終結果將AF視為具有任意數量參數並返回A函數指針,該A是指向匿名結構的指針的別名。

有一個有趣的網站可以幫助將復雜的聲明轉換為人類可讀的文本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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