[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: e-mail verpasst wegen github



Am 20. Februar 2012 14:47 schrieb SchmiTTT <cv.schmitt@googlemail.com>:


> Stimmt nicht ganz, dass der Code "garnichts" macht.
> Gucke genau hin. Jede einzelne Adresse im RAM-Speicher wird auf den boolean
> - Wert TRUE gesetzt.
> Nachdem der RAM-Speicher dann mit TRUE aufgefuellt ist, wird ein chip-Reset
> gemacht mit dem bios-chip.
> (der RAM-Speicher wird losgelassen.)

Hallo SchmiTTT,

ich habe mir mal die Mühe und den Spaß gemacht, mir den von Dir
geschrieben C-Code anzusehen, der hier
    http://lists.debian.org/debian-mentors/2012/02/msg00453.html
veröffentlicht wurde.
.
Er macht effektiv: NICHTS.
Nicht mal ein memory leak ist drin. Wirklich nur: nichts.

Ich habe den Verdacht, dass Du nicht weißt, was Du da programmiert
hast und dass Du nicht weißt, was Du mit dem Compiler tust.

Also los:

> #include <stdio.h>
> #include <stdbool.h>
> #include <math.h>
> #include <stdlib.h>
> #include <signal.h>

> int main( int argc, char *argv[] ) {
>
>  int cp;
>  unsigned int bios;
>  unsigned int BIOS;
>  unsigned int Bios;
>  unsigned int reset;
>  long unsigned int mx;
>  long unsigned int *px,**ppx;

Hier werden ein paar Variablen vom Typ int, unsigned int, Zeiger auf
einen int und Zeiger auf einen Zeiger auf einen int deklariert.

> printf("\n ... Attributes :        Adresses:        hex-Code:       pointers:              hex-Code:       pointers to pointers:   hex-Code: \n");
> printf("_____________________________________________________________________________________________________________________________________");

Eine statische Ausgabe auf stdout.

> for ( mx = true; mx <= 4194304; mx++ )

Hier wird eine Schleife aufgebaut, die von mx = 1 (laut stdbool.h ist
true==1) bis 4194304 durchlaufen wird, also 4194304 mal, da mx im
Schleifenrumpf nichts zugewiesen wird und nur durch den unären
increment Operator ++ jeweils um 1 erhöht wird.

>  {
>    cp=false;

Der int-Variable cp wird der Wert 0 (laut stdbool.h ist false==0) zugewiesen

>    px = &mx;

Die Variable px (Typ: Zeiger auf einen int) erhält als Wert die Adresse von mx

>    ppx = & px;

Die Variable ppx (Typ: Zeiger auf einen Zeiger auf einen int) erhält
als Wert die Adresse von px

>    printf("\n ... Addresses are here ... \t %lu \%16lX \t %lu \t %16lX \t %lu \t %16lX ", mx, mx, (unsigned long)&px[mx], (unsigned long)&px[mx], (unsigned long)&ppx[mx], (unsigned long)&ppx[mx] );
>    printf("\n  ... now them resetted ... \t %lu \%16lX \t %lu \t %16lX \t %lu \t %16lX ", mx, mx, (unsigned long)&px[mx], (unsigned long)&px[mx], (unsigned long)&ppx[mx], (unsigned long)&ppx[mx] );

Wieder irgendeine Ausgabe auf stdout - sonst nichts. Nicht mal eine
Zuweisung innerhalb der Argumente von printf()

>  }

>  bios=true;
>  BIOS=true;
>  Bios=true;
>  reset=true;

Den Variablen bios, BIOS, Bios und reset (alle vom Typ unsigned int)
wird der Wert 1 zugewiesen.
Mit diesen Variablen wird im ganzen Programm nichts gemacht, d.h. ihr
Inhalt wird nie verwendet.

> cp=false;

Der Variablen cp (Typ int) wird der Wert 0 zugewiesen.
Auch mit dieser Variablen wird im ganzen Programm nichts gemacht, d.h.
ihr Inhalt wird nie verwendet.

>    printf("\n\n\n\t\t\t\t\t ... dunno !!! \n\n\n\n\n\n");

Eine statische Ausgabe auf stdout.

>  return (0);
> }

Das war's.

Dein Programm erzeugt 8388611 ( 2 + 2*4194304 + 1) Zeilen Ausgabe auf
stdout, sonst nichts.

Es wird nie in den Speicher geschrieben, außer in die von Dir
deklarierten Variablen.
Es wird den Zeigervariablen im Schleifenrumpf jeweils ein Wert
zugewiesen, so dass jeweils eine andere Zeile mit printf() erzeugt
wird.
Und es wird nach der Schleife den int-Variablen einmalig ein Wert
zugweisen, der nie benutzt wird, so dass der Compiler das
wahrscheinlich schon wegoptimiert.

Schade um deine Mühe!

Matthias


Reply to: