Globale vs. Membervariablen (aufgeteilt aus: [Anfänger]: zweidimisionales Array an Funktion Übergeben.)



  • covfefe schrieb:

    SeppJ schrieb:

    Es ist ja ok, Fragen zu stellen

    Sollte so sein, aber ich mache wohl irgendwas falsch. Wenn mir der globale Moderator schon sagt, dass er nicht diskutieren will, dann ist das hier nicht das richtige Forum für mich.

    Daher bitte ich darum, meinen Account zu löschen. Nicht böse gemeint, aber wir passen einfach nicht zusammen.

    alter, lass dich nicht von den typen mit 4-und mehrstelligen beitragszählern einschüchtern. die können ein bisschen was, aber zu 50% sind sie blender.

    ich kenne dieses forum schon sehr lange. ist schade was daraus geworden ist, aber das wird bestimmt schon wieder.

    btw, sepp ist hier gewissermaßen sowas wie ein autokrat. der erdogan dieses forums. der schmeißt einfach leute raus, die er nicht mag. falls du doch hier bleiben möchtest: leg dich nicht mit ihm an. ignoriere ihn einfach. geh auch nicht auf ihn ein, wenn er dich direkt anspricht. und vor allem: fordere nicht seine kompetenz heraus.

    deine frage war gut. sepp hatte nur eine ausweichende antwort aber er weiß genau, dass die korrekte antwort mit dem zusammenhängt, was er vorher verteufelt hat (static).



  • [quote="guest-666]
    btw, sepp ist hier gewissermaßen sowas wie ein autokrat. der erdogan dieses forums. der schmeißt einfach leute raus, die er nicht mag.[/Quote]

    Das ist ja auch seine Aufgabe. 🙄

    deine frage war gut. sepp hatte nur eine ausweichende antwort aber er weiß genau, dass die korrekte antwort mit dem zusammenhängt, was er vorher verteufelt hat (static).

    Static nimmt man für lokale Variablen, die über den Funktionsaufruf hinaus erhalten bleiben sollen, also z.b. Zählvariablen oder Variablen in Callback-Funktionen, aber doch nicht für Arrays, die irgendwo in main angelegt und dann in einer Funktion verwendet werden.



  • Wade1234 schrieb:

    Static nimmt man für lokale Variablen, die über den Funktionsaufruf hinaus erhalten bleiben sollen

    und ebenso für nicht-funktionsgebundene variablen, die nur innerhalb einer übersetzungseinheit sichtbar sein sollen. im weitesten sinn ein ersatz für das c++-schlüsselwort "private".


  • Mod

    guest-666 schrieb:

    Wade1234 schrieb:

    Static nimmt man für lokale Variablen, die über den Funktionsaufruf hinaus erhalten bleiben sollen

    und ebenso für nicht-funktionsgebundene variablen, die nur innerhalb einer übersetzungseinheit sichtbar sein sollen. im weitesten sinn ein ersatz für das c++-schlüsselwort "private".

    Der Sinn ist so weit weg, da muss erst interstellare Raumfahrt erfunden werden, um ihn zu finden. Selbst dann stehen die Chancen schlecht.

    Find dich damit ab, das ist Schwachfug, egal wie oft du ihn wiederholst oder wie oft du die Leute mit Durchblick beleidigst. Es ist einfach faktisch falsch, das ist unmittelbar ersichtlich.



  • guest-666 schrieb:

    Wade1234 schrieb:

    Static nimmt man für lokale Variablen, die über den Funktionsaufruf hinaus erhalten bleiben sollen

    und ebenso für nicht-funktionsgebundene variablen, die nur innerhalb einer übersetzungseinheit sichtbar sein sollen.

    Ja das stimmt. Wenn man globale Variablen als static deklariert, sind diese nur innerhalb der Datei sichtbar. Wann verwendet man globale Variablen? Wenn man z.B. eine Interrupt Service Routine programmiert, die keine Parameter übergeben bekommt, bei einem Mikrocontroller der in einer Weltraumsonde arbeiten soll und bei dem es dann auf jeden einzelnen Taktzyklus ankommt (Strom sparen) oder weil man in seinem Zimmerchen sitzt und zum Spaß programmiert.
    Wann verwendet man keine globalen Variablen? Immer dann, wenn es auch ohne geht und ganz besonders dann, wenn man Programmieren lernen will.

    im weitesten sinn ein ersatz für das c++-schlüsselwort "private".

    Im weitesten Sinne sind Äpfel auch ein Ersatz für Birnen.



  • Ich bin jetzt wahrlich kein C Profi - programmiere aber so aus Hobby damit.
    Aufgrund der Diskussion hier, habe ich mal ein wenig experimentiert:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    //
    typedef struct _MyStruct
    {
    	int str_var;
    	int *str_pnt;
    } MyStruct;
    //
    void ausg(int wert)
    {
    	printf("wert - Funktion = %p\n", &wert);
        printf("wert - Funktion = %i\n", wert);
        return;
    }
    //
    void test (int zahl,MyStruct *tst)
    {
    	printf("zahl - test = %p\n", &zahl);
    	if (tst == NULL)
    	{
    		zahl++;
    	}
    	else
    	{
    		tst->str_var = tst->str_var + 10;
    		zahl = tst->str_var;
    	}
        ausg (zahl);
        return;
    }
    //
    int main(void) 
    {
    	MyStruct *StructTest;
    //
    	StructTest = malloc(sizeof(StructTest));
    	StructTest->str_var = 50;
    	StructTest->str_pnt = &StructTest->str_var;
    //
        int variable = 5;
        int *pntvar = &variable;
        printf("pntvar - main = %p\n", pntvar);
    //
        test (*pntvar,NULL); // keine Chance auf was Globales
        printf("wert in pntvar - main = %i\n", *pntvar);
        test (variable,NULL);
        printf("variable - main = %i\n", variable);
    //
        test (*StructTest->str_pnt,NULL); // ebenfalls keine Chance mit struct Member
        test (StructTest->str_var,NULL);
        test (*StructTest->str_pnt,StructTest); // ab hier wirds "global" (gesamte struct)
        test (StructTest->str_var,StructTest); // Wenn das auch verboten ist, nenne ich mich ab heute Leo
        printf("str_var - main %d\n", (*StructTest).str_var); // :-)
        free(StructTest);
        return 0;
    }
    

    Was ab Zeile 53 gemacht wird, entspricht doch den "C-Regeln"? Und wenn ich diese Adresse an alle Funktionen weiterreiche, könnte man diese Variablen in dieser "struct" als "global" bezeichnen - oder ist das auch verboten? 😕



  • Den Unterschied zwischen "global" und global bemerkst du, wenn du das Ganze nochmal mit einer weitern Variable *MyStruct2 StructTest; machst.



  • global bedeutet, dass du MyStruct *StructTest außerhalb der Main anlegst und diese dann auch nicht als Parameter test übergibst, sondern dort direkt aufrufen kannst und das in jeder Funktion.



  • Wade1234 schrieb:

    guest-666 schrieb:

    btw, sepp ist hier gewissermaßen sowas wie ein autokrat. der erdogan dieses forums. der schmeißt einfach leute raus, die er nicht mag.

    Das ist ja auch seine Aufgabe. 🙄

    Ähh ... es ist seine Aufgabe, Leute rauszuschmeißen, die er nicht mag? Würde mich wundern ...


  • Mod

    Bitte beim Thema bleiben, anstatt Moderationsentscheidungen zu diskutieren. Einfache Mitleser in diesem Thread sehen nur, was ich stehen lies. Ihnen fehlen damit wesentliche Informationen zur Beurteilung von Moderationsentscheidungen. Da ich obigen Erdoganvergleich stehen lies, kann sich jeder mal selber ausmalen, was guest-666 wohl so verzapft haben mag, bevor ich ihn rausgeschmissen habe.

    Das ist das letzte, was dazu gesagt wurde, zurück zum Thema.


Anmelden zum Antworten