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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.