Eleganterer Pointer weg

Gast #4008488
Lesenswert?

Kann man das nicht irgendwie eleganter lösen ohne hier ein zweiten BYTE 
*y zu benötigen?
1
void debug_putword(WORD *w)
2
{
3
    BYTE b[10];
4
    BYTE *y;
5

6
    y = &b[0];
7
    
8
    ultoa((DWORD) *w, y);
9

10
    while( *y )      // loop until *s == '\0' the  end of the string
11
    debug_putchr( *y++);  // send the character and point to the next one
12
    debug_putchr( '\r');       // terminate with a cr / line feed
13
}
Gast #4008563
Lesenswert?

1
void debug_putword(WORD *w)
2
{
3
   char b* = alloca(10);
4
   ultoa(*w, b);
5

6
   while( *b )      // loop until *s == '\0' the  end of the string
7
      debug_putchr( *b++);  // send the character and point to the next one
8
    debug_putchr( '\r');       // terminate with a cr / line feed
9
}
#4008595
Lesenswert?

Programmierst du auf einem uC oder PC? Ich schreib hier einfach mal, wie 
ich das auf einem uC lösen würde (ungetestet):
1
void debug_putstr(const char * restrict Str){
2
  while(*s){
3
    debug_putchr(*s++);
4
  }
5
}
6

7
void debug_putword(WORD a){
8
  char Buffer[10];
9
  ultoa(a, Buffer, 10);
10
  
11
  debug_putstr(Buffer);
12
  debug_putchr('\r');
13
}

Für die Grösse von Buffer würde ich noch etwas Präprozessormagie 
anwenden, damit die Funktion auch auf anderen Plattformen funktioniert.

MaWin schrieb:
> printf("%ul\r",w) ?
Da es sich um Debug-Ausgaben handelt, würde ich eher folgendes 
verwenden:
1
fprintf(stderr, "%lu\r", w);
#4009792
Lesenswert?

Peter II schrieb:
> Rolf Magnus schrieb:
>> Alloca ist eigentlich dafür da, wenn die Größe erst zur Laufzeit bekannt
>> ist. Was sollte es bringen, das mit einer Konstanten aufzurufen?
>
> das was die Aufgabenstellung war.
>
>> Eleganterer Pointer weg

Wobei man auch sagen muss, dass der urspüngliche Code (jetzt mal 
abgesehen davon, dass man die Funktionalität auf 2 Funktionen aufteilen 
sollte, wie gezeigt), so schlecht nicht war. Der TO muss lernen, dass 
Hilfsvariablen nichts schlechtes sind. Im konkreten Beispiel und einen 
halbwegs intelligenten Compiler vorausgesetzt, bleibt von dieser 
Pointervariable sowieso im erzeugten Code nichts über, ausser einer 
Registerbelegung, die er aber so und so hätte.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren