Aracılığıyla paylaş


İşlev Prototipleri

İşlev bildirimi işlev tanımından önce gelip işlevin adını, dönüş türünü, depolama sınıfını ve diğer özniteliklerini belirtir. Prototip olmak için işlev bildiriminin işlevin bağımsız değişkenleri için türler ve tanımlayıcılar da oluşturması gerekir.

Sözdizimi

declaration:
declaration-specifiersattribute-seqtercih et init-declarator-list ;

/* attribute-seqopt Microsoft'a özgü */

declaration-specifiers:
storage-class-specifierdeclaration-specifiersTercih
type-specifierdeclaration-specifiersTercih
type-qualifierdeclaration-specifiersTercih

init-declarator-list:
init-declarator
init-declarator-list , init-declarator

init-declarator:
declarator
declarator = initializer

declarator:
pointerTercih direct-declarator

direct-declarator: /* İşlev bildirimcisi */
direct-declarator ( parameter-type-list ) /* Yeni stil bildirimcisi */
direct-declarator ( identifier-listopt ) /* Eski stil bildirimci */

Prototip, işlev tanımıyla aynı biçime sahiptir, ancak kapanış parantezinin hemen ardından noktalı virgülle sonlandırılır ve bu nedenle gövdesi yoktur. Her iki durumda da, dönüş türünün işlev tanımında belirtilen dönüş türüyle aynı olması gerekir.

İşlev prototipleri aşağıdaki önemli kullanımlara sahiptir:

  • dışındaki inttürleri döndüren işlevler için dönüş türünü oluştururlar. Değer döndüren int işlevler prototip gerektirmese de prototipler önerilir.

  • Tam prototipler olmadan standart dönüştürmeler yapılır, ancak parametre sayısıyla bağımsız değişkenlerin türünü veya sayısını denetleme girişiminde bulunulmamalıdır.

  • Prototipler, bu işlevler tanımlanmadan önce işlevlere yönelik işaretçileri başlatmak için kullanılır.

  • Parametre listesi, işlev çağrısındaki bağımsız değişkenlerin işlev tanımındaki parametrelerle eşleşerek eşleşmediğini denetlemek için kullanılır.

Her parametrenin dönüştürülen türü, işlev çağrısının yığına yerleştireceği bağımsız değişkenlerin yorumunu belirler. Bir bağımsız değişken ve parametre arasındaki tür uyuşmazlığı, yığındaki bağımsız değişkenlerin yanlış anlaşılmasına neden olabilir. Örneğin, 16 bit bir bilgisayarda, 16 bit işaretçi bağımsız değişken olarak geçirilirse ve parametre olarak long bildirilirse, yığındaki ilk 32 bit parametre olarak long yorumlanır. Bu hata yalnızca parametresiyle long değil, sonraki tüm parametrelerle de sorun oluşturur. Tüm işlevler için eksiksiz işlev prototipleri bildirerek bu tür hataları algılayabilirsiniz.

Prototip bir işlevin özniteliklerini oluşturur. Ardından işlev tanımından önceki işlev çağrıları (veya diğer kaynak dosyalarda gerçekleşen) bağımsız değişken türü ve dönüş türü uyuşmazlıkları denetlenebilir. Örneğin, bir prototipte depolama sınıfı tanımlayıcısını static belirtirseniz, işlev tanımında depolama sınıfını da belirtmeniz static gerekir.

Tam parametre bildirimleri (int a), aynı bildirimdeki soyut bildirimcilerle (int) karıştırılabilir. Örneğin, aşağıdaki bildirim yasaldır:

int add( int a, int );

Prototip, bağımsız değişken olarak geçirilen her ifadenin türünü ve tanımlayıcısını içerebilir. Ancak, bu tür tanımlayıcılar yalnızca bildirimin sonuna kadar kapsam içindedir. Prototip, bağımsız değişken sayısının değişken olduğu veya hiçbir bağımsız değişkenin geçiril olmadığı gerçeğini de yansıtabilir. Böyle bir liste olmadan, uyuşmazlıklar ortaya çıkarılamayabilir, bu nedenle derleyici bunlarla ilgili tanılama iletileri oluşturamaz. Tür denetimi hakkında daha fazla bilgi için bkz . Bağımsız değişkenler.

Microsoft C derleyicisindeki prototip kapsamı artık derleyici seçeneğiyle derlenirken ANSI uyumluluğuna sahip /Za . Bir prototip içinde veya union etiketi bildirirsenizstruct, etiket genel kapsamda değil bu kapsama girilir. Örneğin, ANSI uyumluluğu için ile /Za derleme yaparken, tür uyuşmazlığı hatası almadan bu işlevi hiçbir zaman çağıramayın:

void func1( struct S * );

Kodunuzu düzeltmek için, işlev prototipi struct öncesinde veya union genel kapsamında öğesini tanımlayın veya bildirin:

struct S;
void func1( struct S * );

altında /Ze, etiketi yine de genel kapsamda girilir.

Ayrıca bkz.

İşlevler