Hızlı yanıt: işlevin bağımsız değişken almadığını belirtmek int testlib()
için int testlib(void)
olarak değiştirin .
Bir prototip tanımı gereği bir işlev bildirimi olduğunu işlevin argümanı (ler) in belirtir tip (ler) i.
Prototip olmayan bir işlev bildirimi
int foo();
argüman sayısını veya türünü belirtmeyen eski stil bir bildirimdir. (1989 ANSI C standardından önce, bu, dilde mevcut olan tek tür işlev beyanıydı.) Böyle bir işlevi herhangi bir sayıda bağımsız değişkenle çağırabilirsiniz ve derleyicinin şikayet etmesi gerekmez - ancak call tanımla tutarsız , programınızın tanımlanmamış davranışı var.
Bir veya daha fazla bağımsız değişken alan bir işlev için, bildirimdeki her bağımsız değişkenin türünü belirtebilirsiniz:
int bar(int x, double y);
Bağımsız değişken içermeyen işlevler özel bir durumdur. Mantıksal olarak, boş parantezler bir bağımsız değişkeni belirtmek için iyi bir yol olurdu, ancak sözdiziminin eski stil işlev bildirimlerinde zaten kullanıldığını, bu nedenle ANSI C komitesi void
anahtar kelimeyi kullanarak yeni bir sözdizimi icat etti :
int foo(void); /* foo takes no arguments */
Bir işlev tanımı (işlevin gerçekte ne yaptığına ilişkin kodu içeren) bir bildirim de sağlar . Sizin durumunuzda, aşağıdakine benzer bir şeye sahipsiniz:
int testlib()
{
/* code that implements testlib */
}
Bu, için prototip olmayan bir bildirim sağlar testlib
. Bir tanım olarak, bu derleyiciye testlib
hiçbir parametresi yoktur, ancak bir bildirim olarak, derleyiciye yalnızca testlib
belirtilmemiş ancak sabit sayıda ve türde argüman alan bir derleyici söyler .
Eğer değiştirirseniz ()
için (void)
beyanında bir prototip haline gelir.
Bir prototipin avantajı, yanlışlıkla testlib
bir veya daha fazla bağımsız değişkenle arama yaparsanız , derleyicinin hatayı tanılamasıdır.
(C ++ biraz farklı kurallara sahiptir. C ++ 'ın eski stil işlev bildirimleri yoktur ve boş parantezler özellikle bir işlevin argüman almadığı anlamına gelir. C ++, C (void)
ile tutarlılık sözdizimini destekler. C ve C ++ olarak, muhtemelen ()
C ++ ve C (void)
sözdizimini kullanmalısınız.)