Das geht in C nicht (aber in anderen Sprachen, wie z.B. C++, durchaus). Du wirst dich mit einer der folgenden Möglichkeiten begnügen müssen (was genau passt, hängt davon ab, was du genau vor hast):
Zwei verschiedene Funktionen mit unterschiedlichem Namen. Die eine Funktion kann evtl. die andere aufrufen:
int add3(int a, int b, int c) { return a+b+c;}
int add2(int a, int b) { return add3(a,b,0); }
Eine Funktion mit beliebig vielen Parametern via Ellipse a la printf. Ein nicht gegebenes Argument wird dann eben als Defaultargument betrachtet
Eine Funktion mit beliebig vielen Parametern, aber ohne Ellipse, a la qsort. Das sind zwar nicht im direkten Sinne beliebig viele Funktionsparameter, aber durch die Angabe von Anfang und Anzahl, kann die Funktion auf einem beliebig großen Satz von Daten arbeiten.
Ein kompliziertes Gefrickel mit void*, welches im Prinzip da drauf hinaus liefe, sich seine eigene Ellipse nach zu programmieren.