1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Mitglieder
  3. Plantschkuh!

Beiträge von Plantschkuh!

  • Axis C++ example

    • Plantschkuh!
    • 16. August 2008 um 16:08
    Zitat von M.W.

    Now i think it finds the library but i get the error "undefined reference to 'Calculator::Calculator()' "


    Da hast du wohl in der Klasse Calculator einen parameterlosen Konstruktor für Calculator deklariert, und rufst ihn auch auf, aber du hast keine Definition angegeben.

  • Segfault finden

    • Plantschkuh!
    • 8. August 2008 um 09:54
    Zitat von davewood

    Du meinst ein sleep(60) gleich am Beginn von main() würde zu folgendem Verhalten führen:

    (1) ./nagios
    (2) sleep(60)
    (3) nagios forked
    (4) child macht sleep(60) PID existiert bereits und kann ausgelesen werden
    (5) gdb nagios -d /home/nagios/... <PID>

    Versteh ich deine sleep Theorie richtig?


    So, aber ohne Schritt 2, haett ichs mir gedacht. Das sleep waere ja nur im Child. Jetzt wirkts aber nach dem letzten Post so, als wuerdest du dich im Child nichtmal so weit auskennen, dass du sagen kannst, welche Funktion als allererste aufgerufen wird. Versteh ich das richtig?

  • Probleme mit Return

    • Plantschkuh!
    • 8. August 2008 um 09:51
    Zitat von lowkey

    Wegen malloc, ich habe gelesen das diese funktion einen pointer vom typ Void zurueckgibt und daswegen mache ich den cast zu float.


    Ja, tut sie. Aber Pointer vom Typ void werden in C automatisch auch ohne Cast in Pointer auf andere (Daten-)Typen umgewandelt. So wie diverse Zahlentypen auch ohne Cast ineinander umgewandelt werden.

    Der Cast ist kein Fehler an sich, er koennte aber den Fall verstecken, dass man eben malloc verwendet, ohne <stdlib.h> inkludiert zu haben. Dann ist es ein Cast von int auf einen Pointertyp, und der koennte theoretisch schiefgehen, wenn ints und Pointer unterschiedlich gross sind.

    Generell habe ich eine Abneigung gegenueber unnoetigen Casts. Schlimm sind die "ich-ignoriere-den-Rueckgabewert-dieser-Funktion"-Casts; dass der Wert ignoriert wird, sieht man auch so. An die Spitze getrieben habe ich mal Code von einem respektablen Mitglied dieses Forums gesehen, der Statements dieser Form enthalten hat:

    Code
    (void) free(ptr);


    Das ist weder "defensives Programmieren" noch selbstdokumentierender Code, das ist nur noch programmiertechnischer Dadaismus aus Gewohnheit, und als solcher kein guter Programmierstil.

    Jeder Cast sollte was aussagen, und dieser sagt aus "ich weiss nicht, was free zurueckgibt, es ist mir auch egal, ob es einen Fehler zurueckgeben koennte (!), und ich machs halt so, weil mir eingetrichtert wurde, dass mans halt immer so macht". Aehnlich ist mein Eindruck, wenn ich Code lese, der malloc castet -- "aha, anderer Pointertyp, ich caste mal, weil ich das Typsystem meiner Sprache nicht so gut kenne, wie ich sollte". Ich respektiere da natuerlich die gut begruendete entgegengesetzte Meinung, aber das ist wie gesagt mein Eindruck, wenn ich den nackten Code sehe. Hab mir gedacht, ich erwaehns mal, eigene Meinung bilden kann man sich dann auch noch :)

    Zitat

    Ich habe mir auch die sysprog Folien angeschaut, daswegen mache ich auch gerade C :P. Da steht der cast auch mit drin.


    Mit Verlaub, die Sysprog-Menschen sind nicht die kompetentesten C-Programmierer der Welt. Aber mir ist auch klar, dass man das als Anfaenger nicht so einschaetzen kann :)

    Ich begruende diese Aussage wohl besser anhand von zwei nicht repraesentativen Beispielen. In einer Sysprog-Abgabe hatte ich Code, der mit Eventcountern irgendwas gemacht hat, ich erinner mich an die Funktionsnamen nicht mehr, aber der Code hatte die Form

    Code
    eventcounter c;
    for (c = anfang(); c != der_event_auf_den_ich_warte(); c = naechster_event())
    {
        ...
    }


    Die Tutorin wollte das nicht akzeptieren, hat ewig nicht geglaubt, dass man mit einer for-Schleife was anderes machen kann als Sachen zaehlen.

    Und noch viel schlimmer, bei einem der Tests kam die Frage "was ist das Ergebnis von diesem Programm", wobei im Code sowas gestanden ist:

    Code
    int array[42];
    array++;


    Ich hab waehrend dem Test den einen Assi hergerufen und ihm gesagt, dass das nicht C ist, er darauf "dochdoch, Arrays und Pointer sind das selbe in C". Stimmt nicht, sie sind aehnlich, haben aber bestimmte gravierende Unterschiede, unter anderem, dass man obiges nicht machen kann. Gut, das ist ja schlimm genug, und ich habs auch am Pruefungsbogen verzeichnet. Und was machen die dann? Statt ihren Fehler zuzugeben, wird nach dem Test eine Mail ausgesendet mit einer Aussage der Art "viele Studenten hatten bei einem Beispiel Verstaendnisprobleme", und wer nichts einigermassen plausibles hingeschrieben hat, kann zu einem zehnminuetigen Nachtest ueber ein aehnliches Beispiel antreten.

    So, Frust von der Seele geredet :)

    Zitat

    Danke fuer die weitere Erklaerung von -O2. Wundert mich aber schon das bei einer uninitialized variable der normale compiler ohne die O2 option net meckert.


    Wie gesagt, es ist dafuer eine Analyse noetig, die fuer Optimierungen wichtig ist, ansonsten nicht. Die ist jetzt nicht wirklich aufwendig, aber wenn man den Compiler nicht um Optimierung bittet, moechte er trotzdem so schnell wie moeglich laufen und keine unnoetigen Analysen durchfuehren.

  • Probleme mit Return

    • Plantschkuh!
    • 7. August 2008 um 10:05
    Zitat von lowkey

    Fuer was ist denn das -O2 gut?


    Paulchen und Kampi haben schon die generelle Erklaerung geliefert. Aber warum ich -O2 als Warning-Flag einstufe, ist sowas da:

    Code
    [0 gergo@c8:~] cat uninit.c 
    int f(void)
    {
        int x;
        if (x > 0)
            return 42;
        else
            return 23;
    }
    [0 gergo@c8:~] gcc -Wall -Wextra -ansi -pedantic -c uninit.c 
    [0 gergo@c8:~] gcc -Wall -Wextra -ansi -pedantic -c -O2 uninit.c 
    uninit.c: In function 'f':
    uninit.c:4: warning: 'x' is used uninitialized in this function
    Alles anzeigen

    Mit -O2 fuehrt der gcc bestimmte Programmanalysen durch, die er ohne Bitte um Optimierung nicht macht.

    Zitat
    Code
    *numbers = (float*)realloc(*numbers, stack_size);


    Der Rueckgabewert von malloc, realloc etc. braucht und soll in C nicht gecastet werden. Wenn dein Compiler ohne Cast schreit, hast du <stdlib.h> nicht inkludiert, oder du verwendest keinen C-Compiler. (C++ braucht den Cast, und viele Leute kompilieren aus Unwissenheit C als C++. Einige auch absichtlich, weil die Typueberpruefung in einigen solchen Details staerker ist. Ist eine Geschmacksfrage, ich finds nicht so sinnvoll.)

    Zitat von Kampi

    zu starke optimierung kann schon mal in die hose gehen.


    Erfahrungswerte? -O3 verwend ich fast nie, mit -O2 waeren mir aber noch nie Compilerbugs aufgefallen.

  • Segfault finden

    • Plantschkuh!
    • 7. August 2008 um 09:53
    Zitat von davewood

    Der Child-Prozess der den Fehler verursacht ist leider nur für eine Sekund oder so da (laut watch 'ps aux|grep nagios') und somit zu kurz als dass ich ihn derwisch


    Ich steig noch immer nicht ganz durch, wie das mit Nagios funktioniert... aber du hast doch Kontrolle ueber die main-Funktion oder was auch immer der Einstiegspunkt deines fehlerhaften Child-Prozesses ist, oder? Da wuerd ich ganz primitiv einfach ein sleep(60) einbauen, und schon haett ich eine Minute Zeit, die PID herauszufinden und mich anzuhaengen.

  • Probleme mit Return

    • Plantschkuh!
    • 6. August 2008 um 17:44
    Zitat von lowkey

    Ich hatte eine float variable und wollte sie mit folgendem code ausgeben:

    Code
    printf("The magic number is: %d\n", u);


    Ein richtig guter Compiler sollte dich warnen, wenn du sowas probierst. GCC zum Beispiel:

    C
    gergo@anneliese:~$ cat falsch.c 
    #include <stdio.h>
    
    
    int main(void)
    {
        float u = 3.14159;
        printf("pi ist nicht gleich %d\n", u);
        return 0;
    }
    gergo@anneliese:~$ gcc -Wall falsch.c 
    falsch.c: In function ‘main’:
    falsch.c:6: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘double’
    Alles anzeigen

    Es ist dringendst empfohlen, deinen Compiler (fast... :)) so streng wie möglich zu stellen. Warnings sind nicht dafür da, dir zu zeigen, daß dein Compiler nicht mag, sondern um dir Hilfestellungen zu geben, wie du dein Programm verbessern kannst. Es lohnt sich rauszufinden, wie du deinen Compiler dazu bringst, dir für solchen Code eine Warnung auszugeben.

    -Wall -Wextra -ansi -pedantic -O2 rulez.

  • Probleme mit Return

    • Plantschkuh!
    • 6. August 2008 um 17:38
    Zitat von davewood

    Bist ja eine ziemliche C-Crack-Kuh!

    Zitat von Kampi

    ich denk mir auch immer wieder er/sie hat zum fruehstueck nicht gras sondern den C-standard gefressen :winking_face:


    Muh! Danke für [strike]die Blumen[/strike] den Klee. Vor erschreckend langer Zeit war ich regelmäßiger Gast in comp.lang.c, da lernt man Sachen, von denen einem die Hörner schlackern.

  • Probleme mit Return

    • Plantschkuh!
    • 6. August 2008 um 09:53
    Zitat von lowkey

    int test()


    Du solltest dir uebrigens moeglichst frueh, also genau jetzt, angewoehnen, Argumentlisten in C nicht leerzulassen. Eine leere Argumentliste heisst naemlich nicht "diese Funktion hat keine Argumente", sondern aus traditionellen Gruenden leider "diese Funktion koennte Argumente haben, vielleicht auch nicht, aber ich sage es dir nicht". Wenn du ausdruecken willst, dass test keine Argumente nimmt, schreib "void" in die Argumentliste:

    Code
    int test(void)


    Dann kann dein C-Compiler das Programm besser auf Typfehler ueberpruefen.

  • Probleme mit Return

    • Plantschkuh!
    • 6. August 2008 um 09:38
    Zitat von Vevusio

    möglich dass du denkst du verwendest diese funktionen aber in wirklichkeit sind sie dem compiler nicht bekannt und er macht sie einfach deswegen und sie sind entsprechend leer bzw geben 0 zurück


    Nein. In C89, und das ist der noch immer am weitesten verbreitete Standard, ist es absolut legitim, nicht deklarierte Funktionen aufzurufen. Wenn man sie aber nirgends definiert hat, schreit der Linker. Eine Defaultimplementierung wird dir kein C-Compiler synthetisieren.

  • Segfault finden

    • Plantschkuh!
    • 5. August 2008 um 10:38
    Zitat von davewood

    Wenn nicht, wie kann ich einen Coredump erzwingen? Ich vermute mal indem ich ulimit auf unlimited setz und das Programm dann mal in der bash starte oder?


    Ja, ulimit -c unlimited. Aber wenn du das Programm in der bash starten kannst und es verlaesslich jedesmal crasht, brauchst du auch nicht unbedingt einen Coredump, du kannst es gleich im Debugger starten.

  • Segfault finden

    • Plantschkuh!
    • 5. August 2008 um 09:48

    Dieser Post geht mal davon aus, dass du es irgendwie schaffst, deinen Programmteil von einer Kommandozeile zu starten. Mit Nagios kenn ich mich nicht aus...

    valgrind ist ein ganz guter Tip, und auch wenn es "Framework" genannt wird, ist es keine Magie: Du rufst dein Programm auf der Kommandozeile einfach mit

    Code
    valgrind [mein-programm-und-argumente]


    auf und kriegst Unmengen von Fehlermeldungen darueber, was dein Programm alles falsch macht mit Pointern.

    Mit GDB ist es aehnlich:

    Code
    gdb --args [mein-programm-und-argumente]


    Auf dem Prompt dann mal "run" eingeben. Wenn ein Segfault kommt, wird das Programm gestoppt. Ich verwende dann eigentlich fast immer nur den Befehl "bt", der gibt dir einen Stacktrace, und manchmal "print <foo>", wobei <foo> eine beliebige Expression sein kann, ueblicherweise reicht ein Variablenname. Mit q steigt man wieder aus, fertig.

    Fuer erfolgreiches Debugging sollte dein Programm natuerlich mit Debuggingflags kompiliert werden. -ggdb und eher weniger Optimierungsflags sind eine gute Kombi.

  • funktions-prototype in c ?

    • Plantschkuh!
    • 4. August 2008 um 12:02
    Zitat von NickK

    der springende punkt ist, wie geb ich einen parameter im prototyp an, der ein pointer auf eine FUNKTION mit return-value integer ist


    So:

    Code
    int (*myfuncptr)(void)


    Das (void) ist in C wichtig, damits wirklich ein Prototype ist -- ansonsten ist es nur eine Funktion mit nicht naeher definierten Argumenten. Wenn du diesen Stil, inklusive (void)-Parameterlisten, im gesamten Programm durchziehst und keine Funktionspointer herumcastest, duerfte es dann keine Probleme geben.

    Mit Typedefs wird die Syntax vielleicht etwas klarer. Damit koenntest du sowas schreiben:

    Code
    typedef int (*myfuncptr_t)(void);
    int foobar(myfuncptr_t myfuncptr);


    und haettest automagisch die richtige Deklaration des Funktionspointers.

  • Auslandsaufenthalt in der EU staatliche Krankenversicherung?

    • Plantschkuh!
    • 31. Juli 2008 um 22:13
    Zitat von azadi

    dort steht ja unter anderem " Demnach soll auch die Vorabgenehmigung einer Behandlung im Ausland durch den Chefarzt entfallen, wenn ein EU-Bürger einen Arzt oder eine Ambulanz wählt." also gehe ich davon aus, dass in einem Fall nach dem bestehenden recht eine Vorabgenehmigung seitens Chefarzt notwendig ist.


    Im Standard ist unlängst auch sowas gestanden. Das verwirrt mich insofern, als ich heute einen Flyer von der Sozialversicherung in die Hände gekriegt hab, der da sagt: "Aufgrund internationaler Vereinbarungen sind Vertragsärzte in [EU-Ländern und noch ein paar] verpflichtet, Ihre [e-Card] zu akzeptieren und Sie wie einen nationalen Patienten zu behandeln." Ohne Genehmigung und Vorauszahlung anscheinend. Das bezieht sich vielleicht aber nur auf Urlaub und nicht dauerhafte Auslandsaufenthalte, wer weiß; kompliziert, das Ganze.

    Wie dem auch sei, der Knackpunkt der ursprünglichen Frage ist wohl der ewig lange Aufenthalt, während dem man in Österreich wohl nur in Sonderfällen versichert ist (Familienbehilfeberechtigt oder so).

  • Tutorial

    • Plantschkuh!
    • 22. Juli 2008 um 20:32

    Gute C-Bücher: http://users.powernet.co.uk/eton/clc/cbooks.html
    Die haben sicher alle was über Dateibehandlung. (Ich nehm an, du hättest gern ein Web-Tutorial, aber damit kann ich nicht dienen.)

  • Delphi 2006 - wie schwer umzusteigen

    • Plantschkuh!
    • 20. Juli 2008 um 11:49
    Zitat von Old Thrashbarg

    auch wenn Delphi zumindest aus meiner Beobachtung heraus keine wirklich große Rolle im Moment spielt


    Wenn du damit ein Praktikum/einen Job/ein Hobby findest, dann spielt es ja für dich eine große Rolle. Man muß ja nicht immer das tun, was alle anderen auch tun :)

  • bewerbungsunterlagen.

    • Plantschkuh!
    • 19. Juli 2008 um 14:22
    Zitat von Loreley

    Ordentliches Foto im Lebenslauf


    Sollte auf der TU übrigens wurscht sein, selbst wenns woanders möglicherweise nicht wurscht ist.

  • piratenpartei will zur NR-wahl 2008 antreten

    • Plantschkuh!
    • 18. Juli 2008 um 11:40
    Zitat von Aeroflare

    Mir wirkte nur die Berechnung von Plantschkuh! etwas plump und dies wollte ich damit klar stellen.


    Die Berechnung war auch plump. Sie waere bei 100 oder 125125612 % Inflation genauso plump gewesen, allerdings waere die Schlussfolgerung eine andere gewesen.

  • piratenpartei will zur NR-wahl 2008 antreten

    • Plantschkuh!
    • 18. Juli 2008 um 10:41
    Zitat von stonemaster

    wie schon jemand richtig gesagt hat, besteht der Warenkorb, mit dem die Inflation berechnet wird, aus über 700 Artikeln. [...] Demjenigen gehts sicher anders und er hat ganz andere Probleme.


    Eh. Meine Rechnung war bewusst naiv, da ich mir nicht alle Billazetterl von den letzten zwei Jahren aufgehoben habe. Da ich aber nicht mit dem Auto fahre und Fernwaerme beziehe, bin ich glaub ich nicht sooo weit von den 4 % weg. In der Zeitung gestern war irgendwas davon, dass der Preisanstieg bei Treibstoffen allein fuer ein Drittel der Inflationsrate verantwortlich ist. Der Brotpreis ist angeblich auch um 15 % gestiegen, aber der Mensch lebt nicht von Brot allein.

    Zahlen hat sonst noch niemand genannt, und nur aufs persoenliche Empfinden einiger Personen hin bin ich kaum bereit, in Panik zu verfallen.

  • piratenpartei will zur NR-wahl 2008 antreten

    • Plantschkuh!
    • 17. Juli 2008 um 20:19
    Zitat von Aeroflare

    Ich bin erst letztens mal über die Inflation beim ersten Weltkrieg gestolpert... Da waren's auch mal "nur" 4%...


    Und dann warens monatlich 32400 % (laut da). Wolltest du auf was bestimmtes hinaus?

  • piratenpartei will zur NR-wahl 2008 antreten

    • Plantschkuh!
    • 17. Juli 2008 um 19:46
    Zitat von Ivy

    Du findest es also nicht wichtig, dass die Inflation hoch ist? Hast du an Geldscheisser oder so?


    Na, na, na. Laut heutigem Standard beträgt die Inflation 4 Prozent. Naiv wie ich bin, rechne ich: Wenn ich voriges Jahr mit 1000 Euro im Monat ausgekommen bin, brauche ich heuer 40 Euro mehr im Monat. Ist nicht nix, aber Geldscheißerausmaße sehen für mich persönlich anders aus...

Rechtliches

Impressum

Datenschutzerklärung