-
Notifications
You must be signed in to change notification settings - Fork 0
/
bolum6.txt
64 lines (41 loc) · 2.16 KB
/
bolum6.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
6 Fonksiyon bildirimleri
fundecl ::= [fn_ctype] funinfo ∗ funid ([PARAMSEQ(param, ε)]) { [stmt_seq] }
funproto ::= [fn_ctype] funinfo ∗ funid ([PARAMSEQ(param, ε)]);
funinfo ::= inline
| storage
storage ::= static
| auto
| register
| extern
funid ::= id
| metaid Id
| OR(stmt)
param ::= type id
| metaid Param
| metaid ParamList
decl ::= ctype id
| fn_ctype (* id) (PARAMSEQ(name_opt_decl, ε))
| void
| metaid Param
PARAMSEQ(gram_p, when_p) ::= COMMA_LIST(gram_p | ...[when_p])
Bir fonksiyon ile eşleştirmek için fonksiyon isminden önce görünen tüm açıklamaları sağlaması gerekli değildir. Örneğin,aşağıdaki anlamsal yama:
1 @@
2 @@
3
4 foo() { ... }
fonksiyon bildirimi aşağıdaki gibi eşleşir:
1 static int foo() { return 12; }
Bu davranış "optional_storage" izomorfizm devre dışı bırakarak kapatılabilir. Eğer biri fonksiyon bildiriminden önce kodu eklerse,etkisi eklenmiş kod türüne bağlıdır.Eklenen kod, bir fonksiyon tanımı veya CPP kodu ise ,fonksiyon tanımı önceki herhangi bir yorum dahil olmak üzere fonksiyon tanımı ile ilgili tüm bilgileri, yeni kodun önüne yerleştirilir.Diğer taraftan,yeni kod fonksiyon ile ilişkiliyse,ek "static" anahtar kelimesi gibi,yeni kod anlamsal yama fonksiyon tanımının geri kalanı ile ilgili göründüğü yere konulur. Örneğin,
1 @@
2 @@
3
4 + static
5 foo() { ... }
"static" hemen fonksiyon adının öncesine yerleştirilmesine neden olur.Aşağıdakiler sadece tipi öncesine yerleştirilmesine neden olur
1 @@
2 type T;
3 @@
4 + static
5 T foo() { ... }
Bu eklenen ode doğru pozisyonda yerleştirilir olmasını sağlamak için birçok durumu dikkate almak gerekli olabilir. Örneğin, ihtiyaç olabilecek şeyleri göz önüne alırsak "inline" bildirilmiş fonksiyondur ve diğer ihtiyaç olarak bir şey yoktur.
C derleyici hiçbir dönüş türüne sahip olmayan fonksiyonlara izin verir ve dönüş türünün "int" olduğunu varsayar. Bu tür fonksiyonların derleyici desteği sınırlıdır. Özellikle, parametre listesi her bir parametre için bir tür içermelidir ve varargs içermeyebilir.