Der Mythos "stock"

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Der Mythos "stock"


    Ein Tutorial zu dem Wort "stock"? Was will der euch denn erzählen ?
    Klingt erst mal ganz schön sinnlos,da ihr ja wisst wofür stock steht. Ich muss euch da aber enttäuschen,da grob geschätzt über 90% nicht wissen,wofür stock eigentlich in Bezug auf PAWN bzw Funktion / Variablen* steht.


    Es kommt hier im Forum sehr häufig vor,dass eine große Anzahl an Usern den Begriff "stock" mit "Funktion" verwechselt oder es einfach nicht besser weiss. Um diesem Fehler mal endlich aufzulösen,gibt es dieses kleine Tutorial.
    Ich zitiere mal aus der pawn-lang.pdf


    Den wichtigen Teil habe ich oben fett markiert.Für diejenigen die es selber nicht ins Deutsche übersetzen können,es heißt soviel wie:
    Eine stock Funktion wird vom Pawn Parser in das Programm eingefügt wenn es benutzt wird oder es wird einfach "entfernt" vom Programm,
    sofern es nicht genutzt wird.
    Jede stock Funktion die nicht aufgerufen wird, wird komplett ignoriert, so als ob sie im Quellcode nicht existieren würde.


    Was heißt das jetzt also konkret. Eine Funktion die mit "stock" markiert wird,ist für den Compiler irrelevant sobald sie im Quellcode nirgendwo
    explizit aufgerufen wird. Wird diese Funktion irgendwo im Quellcode aufgerufen, so ist sie identisch zu normalen Funktionen. Es sind also Funktionen,die das Zusatzwort stock erhalten.
    Hier zwei Beispiele:


    #1
    #include <a_samp>
    main()
    {
    foo(1,2);
    }
    stock foo(a,b) {
    printf("(a,b) (%d,%d)",a,b);
    return 1;
    }

    Zitat

    *.AMX Größe ( 582 Bytes (582 Bytes) )


    #2
    #include <a_samp>
    main()
    {
    foo(1,2);
    }
    foo(a,b) {
    printf("(a,b) (%d,%d)",a,b);
    return 1;
    }

    Zitat

    *.AMX Größe ( 588 Bytes (588 Bytes) )


    Wie ihr seht,kein Unterschied zu sehen. Es ensteht der ( zumindest von der Größe ) Gleiche Quellcode.Mit einem Hex-Editor könnt
    ihr auch gerne den Inhalt vergleichen,es wird auch identisch sein.


    Was passiert aber,wenn die Funktion foo nicht genutzt wird ?
    Dazu hier zwei weitere Beispiele:


    #3
    #include <a_samp>
    main()
    {
    }
    stock foo(a,b) {
    printf("(a,b) (%d,%d)",a,b);
    return 1;
    }

    Zitat

    *.AMX Größe ( 425 Bytes (425 Bytes) )


    #4
    #include <a_samp>
    main()
    {
    }
    foo(a,b) {
    printf("(a,b) (%d,%d)",a,b);
    return 1;
    }

    Zitat

    4.pwn(12) : warning 203: symbol is never used: "foo"
    *.AMX Größe ( 425 Bytes (425 Bytes) )


    Wie man sieht,man bekommt hier den Warnhinweis,dass die Funktion foo nicht genutzt wurde.Der Unterschied von Quellcode #3 zu Quellcode #4
    ist nur das Wort "stock". Je nachdem ob die Funktion mit stock deklariert wurde, wird die Funktion ( wie oben erwähnt ) vom Kompiler beachtet
    oder eben nicht.
    Wir werden hier also gewarnt,dass es eine Funktion in unserem Quellcode gibt,die wir nicht nutzen. Es könnte ja sein,dass wir sie ausversehen vergessen haben zu nutzen oder es ein überbleibsel ist.


    Es sind also Funktionen,keine Stocks/stocks(!). ( Wenn das Wort "stock" unbedingt auftauchen soll ,dann halt: stock Funktionen )
    Ihr könnt diese Funktionen lediglich vom Kompiler ignorieren lassen,sofern sie in eurem Code nicht explizit genutzt wird.
    Wenn ihr aber für euch eine Funktion schreibt,werdet ihr sie mit große Wahrscheinlichkeit auch selber nutzen.Wieso würdet ihr diese
    denn sonst schreiben ? Da macht das Wort "stock" also gar keinen Sinn.
    Natürlich ist es Gewohnheit ( auch bei mir ) ob man es ( stock ) davor schreibt oder nicht,nur macht es absolut keinen Unterschied ob es davor steht oder
    nicht.Das Problem ist meiner Meinung nach auch viel mehr die falsche Nutzung des Begriffes "stock". Denn häufig wird das Wort "stock" mit "Funktion" gleich gesetzt,wobei da dann auch ein "Stock" viel besser ist als eine normale Funktion.


    Es gibt unzählige Themen,in denen es um Probleme mit "stocks" geht. Es sind Probleme mit Funktionen,nicht mit stocks. Genau so häufig
    wird geschrieben, "zeig mal deinen stock". Das stimmt alles nicht,ich wiederhole es nochmal,es sind Funktionen.
    Hier mal eines von vielen Beispielen.


    Wenn ihr also etwas aus diesem Tutorial mitnehmt,dann folgendes:
    Kennzeichnet man Funktionen oder Variablen* mit stock,so sind diese für den Kompilier irrelevant,
    sofern sie im Programm/Code nicht genutzt werden.Ihr erhaltet auch keine Warnung,falls diese nicht genutzt werden. Werden sie allerdings genutzt,so sind sie identisch zu normalen Funktionen.



    *

    Spoiler anzeigen

    #5
    #include <a_samp>
    new stock a; // <- Wird nie benutzt,vom Kompiler ignoriert da "stock"
    new b; // Wird nie genutzt, vom Kompiler als nicht genutzt gemeldet
    main()
    {

    Zitat
    Spoiler anzeigen

    5.pwn(9) : warning 203: symbol is never used: "b"


    Goldkiller.

  • Muss auch sagen, ist gut erklärt.
    Das Beispiel was Du verlinkt hast, ist aber eigentlich total unpassend. Weil es da eigentlich um etwas anderes ging^^

    Chief Technology Officer (CTO)


    Interesse an folgenden Domains?

    fivemp.de - planet-zoo.de

    Jetzt anschreiben :)

  • Es gibt da eine Sache die mir da fehlt.
    "Warum kann man keine Stocks per Timer oder CallRemote/LocalFunction aufrufen".


    Wäre echt toll wenn du das noch hinzufügen würdest, denn es gehört definitiv dazu ;)

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Du weißt aber was Callbacks sind?


    Callbacks sind auch Funktionen, sie werden nur durch bestimmte Dinge aufgerufen. Ebenso wie stocks.
    D.h. nicht alles was ein "public" vorne stehen hat ist ein Callback.


    Ich kann auch folgendes machen,
    forward Kaliber();
    public Kaliber()
    {
    return 1;
    }
    Trotzdem ist es kein Callback, laut deiner These kann man es NICHT per Timer aufrufen.
    Kann man aber.
    Wenn man das allerdings vis stock macht, gehts nicht.
    Also ist die Frage, warum geht das nicht?

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Übersetz mal Callback und verknüf das mit beispielsweise "OnPlayerConnect".
    Was fällt dir auf?

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Sehr gutes Tutorial
    und sehr gut erklärt
    10/10

    [tabmenu][tab='Angebote','http://cdn3.iconfinder.com/data/icons/glyph/227/Tag-48.png']

    + Die Preise liegen bei 5-100+€ Ablauf:
    + Entweder ihr addet mich in Skype (PN vorher Schreiben) oder Ihr schreibt eine PN an mich (Betreff - Euer Wunsch z.B. Filterscript)
    + So nun schreibt ihr mir was ihr alles in dem Script haben wollt ich werd euch dann sagen ob ich es hinbekomme.
    + Dann machen wir ein groben Preis aus. Ich werde das Script erstellen und es zusammen mit dem Kunden Testen.



    [tab='Kontakt','http://cdn3.iconfinder.com/data/icons/line/36/person_add-48.png']
    edmix23

    + Bitte beim Adden angeben wer ihr seit oder per PN bescheid sagen!
    [tab='Zahlungs Methoden','https://cdn3.iconfinder.com/data/icons/line/36/check_money-32.png']
    +Paypal!
    +Direkte Banküberweisung

  • Eh nein?


    Callbacks sind Funktionen die durch bestimmte Dinge aufgerufen werden, ohne dass das Script selber was machen muss.
    Das ist bei Timern anders, da arbeitet mehr oder weniger das Script.


    Siehe OnPlayerConnect und die Funktion Kaliber

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Ein gutes Tutorial, was sich viele Anfänger zu Herzen nehmen sollten, denn ich könnte mir die Haare rausreißen, wenn ich Leute sehe, die Beiträge schreiben, wobei sie stock mit einer Funktion gleichsetzen.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen