Mój podstawowy język programowania, j, został niedawno otwarty. Aby to poprawić, badam źródło, które jest napisane w C.Co oznacza typedef A (* AF)()?
Ale to był długi (!) Czas od kiedy przeczytałem lub napisałem C, a nie byłem nawet dobry w tym następnie. A sposób w jaki napisana jest ta część kodu jest ... idiosynkratyczny (wielu interpretatorów APL, wśród których J ma swoje źródło napisane w "stylu APL" na wysokim poziomie, nawet gdy jest napisane w języku niskiego poziomu, bardzo zwięzłe, , intensywne używanie makr itp.)
W tej chwili staram się zrozumieć podstawowe struktury danych, które zatrudnia. Najbardziej podstawowym z nich jest the typedef A
("A" jest dla "array"):
typedef struct {I k,flag,m,t,c,n,r,s[1];}* A;
co rozumiem dobrze. Ale ja stara się owinąć głowę wokół co AF
ma dwie linie później:
typedef A (*AF)();
Co to składnia oznacza? W szczególności, co to znaczy, gdy rzeczy są później zadeklarowane jako "typ AF"? Czy AF
jest po prostu wskaźnikiem do A
?
Moja bezpośrednim celem jest interpretacja zrzuty pamięci, które obejmują rzeczy type V
(dla „verb”), której pierwsze dwa człony są AF
s:
typedef struct {AF f1,f2;A f,g,h;I flag,mr,lr,rr,fdep;C id;} V;
ale moim nadrzędnym celem jest większy niż ten, więc proszę opracować składnię stosowaną w definicji AF.
'AF' jest wskaźnikiem do funkcji, która nie przyjmuje parametrów i zwraca' A'. – dasblinkenlight
@dasblinkenlight: Tak jest w C++. W C jest to typedef dla funkcji o nieokreślonej, ale ustalonej liczbie i typie parametrów i zwraca 'A'. Bardzo prawdopodobne, że * powinno * być zdefiniowane jako 'typedef A (* AF) (void);'. Jeśli naprawdę ma przyjmować dowolną liczbę argumentów, bardzo łatwo można mieć niezdefiniowane zachowanie, wywołując funkcję niepoprawnie, bez diagnostyki kompilatora. –
Baza kodu jest okropna. Powinieneś uciekać, krzycząc. – Hogan