Eleganterer Pointer weg

Gast #4008488
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
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
}
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);
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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.