[英]What does typedef A (*AF)() mean?
我的主要編程語言j是最近開放源代碼。 為了改進它,我正在研究用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
代表一個運算符(副詞),則v1
和v2
仍分別是單子和二元實現,但是f
g
和h
也可以用來保存(咖喱)左和/或右參數。 mr
lr
和rr
分別為monadic級,左級和右級。 而且id
擁有一個操作碼,因此仍然可以從結構中恢復可打印的表示形式。
如果f
g
或h
中的任何操作數本身都是動詞,則它們的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.