Forum: Compiler & IDEs übergabe kleinerer Variable an Funktion ?


von Tishima (Gast)


Lesenswert?

Hallo!

Ich übergebe an eine Funktion normalerweise eine unsigned long.

Nun kann ich ja Problemlos diese Funktion auch nur mit einer unsigned 
short Füttern.

Kann ich das irgendwie unterscheiden welche Urpsrungsvariable an die 
Funktion übergeben wurde, ich möchte dann anders darauf reagieren ?

gruß,
Bjoern

von Karl H. (kbuchegg)


Lesenswert?

Nein.

Aufrufer und Aufgerufener müssen sich darüber einig sein, welches 
Argument was bedeutet und welchen Datentyp es hat. Nicht umsonst gibt es 
Funktionsprototypen, die dem Programmierer helfen, das sicherzustellen.

Die Alternative "variadische Funktionen" willst du an dieser Stelle mit 
Sicherheit nicht ins Auge fassen. Denn dann wird alles noh langsamer, 
als wenn du einfach immer einen unsigned long übergibst.

von Floh (Gast)


Lesenswert?

Wenn du in C++ programmierst, kannst du die Funktion z.B. überladen, 
also 2 Funktionen desselben Namens mit anhand der Datentypen 
unterschiedlichen Parametern.
:-)

von (prx) A. K. (prx)


Lesenswert?

Tishima schrieb:

> Kann ich das irgendwie unterscheiden welche Urpsrungsvariable an die
> Funktion übergeben wurde

Wenn du den Typ meinst: In C nicht, in C++ ja.

von Tishima (Gast)


Lesenswert?

Nochmal ich hab diese Funktion, vieleicht hat jemand ne andere Idee
1
/*
2
  convert unsigned 32bit to string with substraction methode *** very fast***
3
*/
4
5
void u32tostr( u32 uval, char* string)
6
{
7
  u8 d, i, j;
8
  u8 zero;
9
  
10
  string[10]='\0';                       // String Terminator
11
  
12
  zero = 0;
13
  j = 0;  
14
  i = 9;
15
  
16
  do{
17
    i--;
18
    for( d = '0'; uval >= pgm_read_dword(&DEZI32[i]); uval -= pgm_read_dword(&DEZI32[i]) ){
19
    d++;
20
      zero = 0;
21
    }
22
    if( zero == 0 )
23
      string[j]= d;
24
    j++;
25
      
26
  }while( i );
27
28
  string[j]= (u8)uval + '0';
29
}

Wenn dieser Funktion ne usigned long übergeben wird soll ein 10 
stelliger String erzeugt werden, wenn ne unsigned short übergeben wird 
nur ein 5 stelliger.

Bleibt mir nichts andres übrig als 2 getrennte Funktionen zu schaffen ?

mfg,
Bjoern

von Karl H. (kbuchegg)


Lesenswert?

Tishima schrieb:

> Bleibt mir nichts andres übrig als 2 getrennte Funktionen zu schaffen ?

Ja

Das "very fast" solltest du nochmal überdenken
    for( d = '0'; uval >= pgm_read_dword(&DEZI32[i]); uval -= 
pgm_read_dword(&DEZI32[i]) ){

von Tishima (Gast)


Lesenswert?

Ok,
Danke Karl Heinz,
nun muß ich ertmal meinen AVR updaten mein Flash wird zu klein.

gruß,
Bjoern

von Vorschlag (Gast)


Lesenswert?

Du kannst auch in *string (oder string[0]) reinschreiben, wieviel 
Stellen du haben willst.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.