Witam ,
Mam stworzyć funkcję w "czystym" C , która będzie wypisywała wartości podstawowych typów ( int , float i char* ) . Funkcja ta ma sama "rozpoznać" typ . Kompletnie nie znam się na tym języku , nie wiem jaki umieścić parametr funkcji ( rozmyślałem nad void*) i jak wewnątrz tej funkcji rozpoznać co jest intem a co charem. Byłbym wdzięczny za jakiekolwiek porady.
Pozdrawiam
Prawdopodobnie źle zrozumiałeś zadanie.
Jeżeli masz wskaźnik typu void*
to nie ma żadnej możliwości rozpoznania na co on tak naprawdę wskazuje.
Może chodziło o coś takiego:
#include <stdio.h>
typedef enum _KIND { dkInt,dkFloat,dkString } KIND;
typedef struct _VAR { KIND kind; union { int i; float f; char *s; }; } VAR;
VAR convert(const char *str)
{
VAR tmp;
tmp.kind=dkString; // oczywiście to trzeba zbadać najpierw
tmp.s=strdup(str);
return tmp;
}
int main(void)
{
VAR data;
data=convert("Ala ma kota");
switch(data.kind)
{
case dkInt: printf("%d\n",data.i);
case dkFloat: printf("%f\n",data.f);
case dkString: printf("%s\n",data.s);
}
if(data.kind==dkString) free(data.s);
return 0;
}
Dzięki za odpowiedź . Nie do końca rozumiem program przesłany przez użytkownika _13th_Dragon , a mianowicie " tmp.kind=dkString;" -dlaczego na "sztywno" przypisujemy to do chara , i co z np. intem skoro funkcja convert przyjmuje jako parametr tylko chara*. No ale mniejsza z tym , przesłany kod pomógł mi , mam pewien pomysł na funkcje z wykorzystaniem "union" . Co do działalności tej funkcji ... Tworzymy zmienne różnych typów i powiedzmy , że "przypisujemy" je do struktury . Mam zdefiniować funkcje wypisz , która uzyskując jako parametr , czy to inta czy jakiś wskaźnik ma wypisać na ekran wartość danej zmiennej . Coś w stylu szablonu jaki można napisać w c++ .
-dlaczego na "sztywno"
A komentarz do tego wiersza przeczytałeś?
Jeżeli ten wskaźnik to jedyny parametr tej funkcji to się nie da tego zrobić.
Przypominam w C nie ma przeciążenia funkcji.