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
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.
Wenn du in C++ programmierst, kannst du die Funktion z.B. überladen, also 2 Funktionen desselben Namens mit anhand der Datentypen unterschiedlichen Parametern. :-)
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.
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
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]) ){
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.