Nie ma przeciążenia funkcji standardowej w C (nie ma też szablonów), ale prawdopodobnie można zajrzeć do funkcji "podobnych do drukowania" (lub variadic functions) i być może mogą one zrobić to, czego potrzebujesz. Jeśli cokolwiek, pozwalają na elastyczną listę parametrów.
Istnieje przykład takiej funkcji, która pobiera tablicę liczb całkowitych o zmiennej wielkości.
Może masz podpis funkcji, takiej jak void iterate(const char* format, ...);
które można wykorzystać w następujący sposób:
iterate("char", some_char_array); // for char arrays/strings
Albo
iterate("int", some_int_array); // for integer arrays
Aniket sprawia, że dobry punkt jednak, w jaki sposób liczyć Państwo elementy w tablicy całkowitej? Jeśli przekażesz tablicę int jako argument, musisz również przekazać rozmiar, który pokonuje cel liczenia elementów w tablicy (jak już wiesz, że to jest rozmiar).
Zakładam, że nie znasz rozmiaru, ale masz wartość terminatora w tablicy (np. -1).
Zrobiłem coś szybko, robiąc to, czego potrzebujesz, mając na uwadze powyższe założenie.
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
int iterate(const char* format, ...)
{
va_list ap;
va_start(ap, format);
if (strcmp(format, "char") == 0)
{
char* array = va_arg(ap, char*);
return strlen(array);
}
else if (strcmp(format, "int") == 0)
{
int j = -1;
int* int_array = va_arg(ap, int*);
while (int_array[++j] != -1)
;
return j;
}
return 0;
}
int main()
{
printf("%d\n", iterate("char", "abcdef"));
int arr[] = {5, 4, 3, 2, 1, 0, -1};
printf("%d\n", iterate("int", arr));
return 0;
}
Drukuje:
$ ./a.out
6
6
co to jest "rozmiar int"? –
Rozmiar tablicy? Wyjaśnię to, ponieważ wydaje się to nie być jasne. – Nobilis
cóż, jeśli zna rozmiar tablicy przed ręką, dlaczego użyje super takiej funkcji, aby automatycznie wnioskować o typie i wywołać odpowiednią funkcję do obliczenia długości tablicy? :-) –