> Warum wird buffer++ ohne ein * geschrieben und *data++ mit einem *
> Ich verstehs einfach nicht,
Deine Frage ist fast so sinnvoll, wie die Frage:
Warum schreibt ein Prorgrammierer einmal die Berechnung des Umfangs
eines Kreises so
1 | tmp = 2 * Radius;
|
2 | Umfang = tmp * PI;
|
und einmal so
1 | Umfang = 2 * Radius * PI;
|
In deinen beiden Funktionen könnte jeweils die gleiche Syntax benutzen,
wenn man wollte. Schaun wir uns mal an, was da rauskommen würde.
Fall 1: das *data++ im puts soll beibehalten werden. Wie müsste gets
aussehen, wenn es die gleiche Syntax benutzen will.
So
1 | void getsUSART(char *buffer, unsigned char len)
|
2 | {
|
3 | char i; // Length counter
|
4 |
|
5 | for(i=0;i<len;i++) // Only retrieve len characters
|
6 | {
|
7 | while(!DataRdyUSART());// Wait for data to be received
|
8 |
|
9 | *buffer++ = getcUART(); // Get a character from the USART
|
10 | // and save in the string
|
11 | }
|
12 | }
|
warum der Programmierer das nicht gemacht hat? Keine Ahnung. Vielleicht
hat ihn die Courage verlassen das ++ auch auf der linken Seite einer
Zuweisung einzusetzen oder es war ihm nicht wichtig genug, weil der
Optimizer seinen Originalcode sowieso auf diese Version zusammenkürzen
würde. Vielleicht wollte er auch einfach nur eine Hilfsvariable haben,
damit er mit dem Debugger rankommt.
Fall 2: Die Derferenzierung wird vom Inkrement getrennt, so wie das um
gets gemacht ist. Wie muss dann das puts aussehen?
So
1 |
|
2 | void putsUSART( char *data)
|
3 | {
|
4 | char c;
|
5 |
|
6 | do
|
7 | { // Transmit a byte
|
8 | while(BusyUSART());
|
9 |
|
10 | c = *data;
|
11 | data++;
|
12 |
|
13 | putcUART(c);
|
14 |
|
15 | } while( c );
|
16 | }
|
Man sieht auch: Die Einführung einer Hilfsvariablen c bringt dem Code
eigentlich kaum Klarheit, wenn man sein C lesen kann. Sie zieht den Code
nur unnötig in die Länge.
D.h. Ob man die eine Schreibweise benutzt oder die andere ist eigentlich
... in diesen Fällen .... relativ egal. Das eine lässt sich in das
andere umformen und welche Schreibweise man benutzt ist weitgehend
Geschmackssache.