Szybka odpowiedź: zmień int testlib()na, int testlib(void)aby określić, że funkcja nie przyjmuje argumentów.
Prototyp jest z definicji deklaracja funkcja, która określa typ (y) argumentów danej funkcji (S).
Nie-prototypowa deklaracja funkcji, taka jak
int foo();
jest deklaracją w starym stylu, która nie określa liczby ani typów argumentów. (Przed standardem ANSI C z 1989 r. Był to jedyny rodzaj deklaracji funkcji dostępny w tym języku). Możesz wywołać taką funkcję z dowolną liczbą argumentów, a kompilator nie musi narzekać - ale jeśli call jest niezgodne z definicją , Twój program ma niezdefiniowane zachowanie.
W przypadku funkcji, która przyjmuje jeden lub więcej argumentów, możesz określić typ każdego argumentu w deklaracji:
int bar(int x, double y);
Funkcje bez argumentów są przypadkiem specjalnym. Logicznie rzecz biorąc, puste nawiasy byłyby dobrym sposobem określenia tego argumentu, ale ta składnia była już używana w deklaracjach funkcji w starym stylu, więc komitet ANSI C wymyślił nową składnię za pomocą voidsłowa kluczowego:
int foo(void); /* foo takes no arguments */
Definicja funkcji (która zawiera kod określający, co funkcja faktycznie robi) również zawiera deklarację . W twoim przypadku masz coś podobnego do:
int testlib()
{
/* code that implements testlib */
}
Zapewnia to deklarację nie będącą prototypem testlib. Z definicji mówi to kompilatorowi, że testlibnie ma parametrów, ale jako deklaracja mówi kompilatorowi tylko, że testlibpobiera nieokreśloną, ale stałą liczbę i typ (y) argumentów.
Po zmianie ()do (void)deklaracji staje się prototypem.
Zaletą prototypu jest to, że jeśli przypadkowo wywołasz testlibjeden lub więcej argumentów, kompilator zdiagnozuje błąd.
(C ++ ma nieco inne zasady. C ++ nie posiada deklaracje funkcji w starym stylu i pustych nawiasów konkretnie oznacza to, że funkcja przyjmuje żadnych argumentów. C ++ obsługuje (void)składni dla spójności z C. Ale chyba specjalnie potrzebny jest kod do kompilowania zarówno jako C i jako C ++ powinieneś prawdopodobnie użyć ()w C ++ i (void)składni w C.)