Beiträge von Plantschkuh!

    ist ja egal wie der code aussieht, sollte nur zum testen sein ...


    Je klarer der Code, umso leichter siehst du deine Fehler. Und die Leute, die du bittest, deinen Code zu debuggen, tun es lieber. Außerdem ist es einfach nur strange, grundlos die Form *(base + offset) zu verwenden.

    Zitat

    und wo greif ich bitte auf das 3 element zu?


    Im Ausdruck *(temp + 3) bzw. temp[3].

    Zitat

    wieso sollte das ein problem sein?


    Weil temp deklariert ist als vom typ char [3], deswegen sind genau die Indizes 0, 1, 2 zulässig. 3 nicht mehr, sonst hätte das Feld ja vier Elemente.

    Zitat

    das 3 element ist aber trotzdem bestandteil des feldes


    Nein. (Diskutieren sinnlos, ich habe recht. Akzeptiers oder werde ignoriert.)

    Zitat

    nur ist die frage wieso es sich der eine compiler erlaubt und der andere net... wobei eigentlich will ich nur wissen was den STANDARD entspricht, also ob mein compiler richtig arbeitet oder der meines kumpels.


    Der Standard stellt dem Compiler explizit frei, in solchen Fällen beliebiges zu tun. (Genauer: Code zu generieren, der beliebiges tut.) Abstürze zum Beispiel sind auch erlaubt. Oder das Löschen aller deiner Daten.


    Beide arbeiten wieder richtig. char chf[]={'A','B','C'} ist kein C-String, wenn du versuchst, ihn als C-String zu verwenden, machst du als Programmierer den Fehler. Der Compiler hat wiederum das Recht, zu tun, was er will.

    Das könnte man hübscher, standardkonformer, idiomatischer, besser und überhaupt viel wohlriechender auch so formulieren:

    Ohne lustige und höchst unnötige und nein, ganz bestimmt nicht "schnellere" oder "effizientere", weil nämlich ganz äquivalente, Pointerarithmetik sieht man auch gleich, daß du auf Element 3 des dreielementigen Arrays temp zuzugreifen versuchst, dessen Elemente aber 0, 1, 2 heißen. Was mit solchen illegalen Zugriffen passiert, kann sich deine Kombination aus Hardware/Betriebssystem/Compiler beliebig aussuchen. Insofern kein Wunder, daß auf einer anderen Plattform was anderes passiert.

    Zitat von http://www.skype.com/help/faq/technical.html

    How much bandwidth does Skype use while I’m in a call?

    Skype automatically selects the best codec depending on the connection between yourself and the person you are calling. On average, Skype uses between 3-16 kilobytes/sec depending on bandwidth available for other party, network conditions in between, callers CPU performance, etc.


    Hmm. Nehmen wir an, wir telefonieren ca. eine Stunde pro Tag, das macht 100000 Sekunden pro Monat. Im breitesten Fall kommen wir also auf 1600000 KB pro Monat, das sind ca. 1.5 GB. In der Praxis wird der Wert wohl nicht so hoch sein, und überhaupt sollten 1.5 GB heutzutage bei jedem Internetanschluss problemlos drin sein.

    i[ot: imho sollte man aber auch in der lage sein, sich gezielter auszudrücken. ich kritisiere auch nicht jede formulierungsschwäche/rechtschreibfehler/... von dir..]


    Sorry, ich wollte dir nicht auf den Schlips treten. Ich hab halt manchmal einen polemischen Stil (siehe unten). Inhaltlich ist meine Kritik aber rübergekommen, ich hoffe ohne größere Beleidigungen.

    afaik war diese belehrung sehr lehrreich für mich! :ausheck:


    :)

    Zitat

    (SCNR)


    Ah, eine Abkürzung, die mich noch mehr nervt! :) Mal ehrlich, die stupiden Gepflogenheiten des de-Usenets können ruhig dort bleiben. Kann schon sein, daß die Piefkes zum Lachen in den Keller müssen, aber ist es in Österreich wirklich so schlimm, sich für einen kleinen Scherz nicht zu genieren, sondern dazu zu stehen, daß man ihn gemacht hat?

    imho sinds bald 3.25% zinsen.


    Also das ist jetzt total off-topic, aber es nervt, daß immer mehr Leute nicht verstehen, was sie selber schreiben... IMHO = in my humble opinion. Ist es deine Meinung, daß sie bald mehr Zinsen zahlen? Oder glaubst du es vielleicht eher zu wissen? Dann AFAIK = as far as I know (zum Beispiel)


    Plantschkuh!, bringing you nutzlose Belehrungen since 1982

    aber eine werbestrategie von mehreren unternehmen? das wäre doch sehr ungewöhnlich.........


    Naja, vielleicht hat ihnen die Gewista angeboten, das mal zu probieren. Aufmerksamkeit scheints ja zu erregen, aber obs hilft... Es gibt ja die Binsenweisheit, es gäbe keine negative Werbung, aber das stimmt nicht: Seit die )§)=)%&")($% Familie Putz aufgetaucht ist, hat man mich nicht mehr in der Nähe eines Lutz gesehen.


    Da Referenzen auch nur Zeiger ohne Sterndeln sind, treffen fast alle diese Punkte auch auf Referenzen zu.

    Zitat

    Für mich persönlich ist es einfach komplett unverständlich. Ich will mich beim Programmieren nicht dauernd mit Nachdenken über den richtigen Variablenzugriff abgeben.


    Fair enough, manchmal steht die elegante Formulierung der Lösung des Problems im Vordergrund; manchmal gehts um jedes letzte Stücki Performance bzw. um direkte Speicherzugriffe (wenn man Embedded Systems oder Hardwaretreiber oder Betriebssysteme schreibt), dann muß man wohl oder übel in einem konkreteren Maschinenmodell denken, inklusive Unterscheidung zwischen Stack und Heap (automatischen bzw. dynamischen Variablen).

    Außerdem gibts die begründete Meinung, daß ein Programmierer (wir sind ja bitte nicht irgendwer, sondern theoretisch hochbezahlte höchstqualifizierte Denker, auch wenn sich viele für 08/15-PHP-SQL-Zeug hergeben) gefälligst wissen soll, was er tut; über Details wie Variablenzugriffe nachdenken gehört dazu. Mußt du auch in Java machen, jedesmal wenn du eine Zuweisung schreibst; kopierst du jetzt eine Referenz oder doch Daten, und ist das das, was du wirklich willst? Du könntest jetzt natürlich sagen ja, darüber muß man zwar eigentlich nachdenken, aber irgendwann hat man es im Blut und man schreibt automatisch die richtige Variante -- bingo, wenn es bei Referenzen so ist, ist es bei Zeigern auch so.

    Zitat

    Einheitliche Referenzen immer und überall sind z.B. in Java sehr komfortabel.


    Einheitliche Referenzen immer und überall sind in Smalltalk komfortabel und dementsprechend langsam; in Java sind einheitliche Referenzen nicht vorhanden. In anderen Worten: Erklär einem Anfänger, der sich zum Glück nicht mit Zeigern plagen muß, den Unterschied zwischen int und Integer.

    funktinoiert auch soweit, nur dass er die seitenbreite völlig ignoriert und einfach rausschreibt, anstatt den text automatisch umzubrechen..


    Statt mit 'l' links ausgerichteten Text zu verlangen, mußt du mit p{spaltenbreite} verlangen, daß Absätze (paragraph) gesetzt werden. D.h. ändere die Zeile

    Code
    \begin{longtable}[ht]{ll}


    auf sowas wie

    Code
    \begin{longtable}[ht]{p{0.45\textwidth} p{0.45\textwidth}}

    Mit den Breiten kannst du natürlich spielen.

    (Noch ein Tip zum um-Hilfe-fragen: Es hat in diesem Fall zwar nur ein paar sehr wenige Zeilen gebraucht, dein Codefragment zu einem vollständigen kompilierbaren Latex-Dokument zu machen, aber es wäre nett gewesen, wenn du das übernommen hättest; d.h. an den Anfang ein \documentclass, \usepackages etc., damit der dir helfen wollende das Ganze kopieren und gleich testen kann, ohne selber mit sowas rumtun zu müssen. Wenn man mir Code vorsetzt, den ich zuerst umständlich kompilierbar machen muß, bin ich persönlich, und ich nehme an viele andere auch, gleich etwas weniger bereit zu helfen.)

    Zitat von klausi

    Ich gebe zu, mir fehlt da der genaue Einblick, aber wozu dazwischen unterscheiden?


    "Hardwarenahe Programmierung" ist ein schwammiger Begriff, aber er kann zum Beispiel bedeuten, daß man an ganz konkrete fixe Speicheradressen zugreifen muß, inklusive Adressarithmetik (daher Pointer, siehe gleich), und daß die Befehle und Datentypen der Hochsprache irgendwie möglichst direkt auf die zugrundeliegende Maschine abgebildet werden (daher auch primitive Datentypen, die nicht über Pointer oder Referenzen referenziert werden).

    Jetzt kann man in C-Syntax sowas schreiben (Skizze):

    Code
    #define MEIN_MEMORY_MAPPED_INPUTREGISTER ((unsigned char *) 0x283A82FE) /* siehe Prozessor-Doku */
    #define MEIN_MEMORY_MAPPED_OUTPUTREGISTER ((unsigned int *) 0x8D92A9CA)
    #define MEINE_DINGSBUMSTABELLE ((unsigned int *) 0x0000ABCD)
    
    
    unsigned char das_will_ich_wissen = *MEIN_MEMORY_MAPPED_INPUTREGISTER;
    unsigned int *da_will_ich_hinschreiben;
    *da_will_ich_hinschreiben = das_will_ich_wissen + 3;
    MEINE_DINGSBUMSTABELLE[42] = 23;


    Um das so relativ angenehm ausdrücken zu können, braucht man Pointer.

    In Java-ähnlicher Syntax würde das dann vielleicht so aussehen:

    Code
    Address input = new Address(0x283A82FE);
    Address output = new Address(0x8D92A9CA);
    Address tabelle = new Address(0x0000ABCD);
    
    
    char sagsMir = input.readChar();
    output.writeInt(sagsMir + 3);
    tabelle.writeIntWithOffset(23, 42);


    Ist natürlich möglich, das so zu formulieren; stellt sich die Frage, ob es Sinn hat, so eine Sprache zu konstruieren, nur damit der Programmierer mehr tippen kann als in C. Wenn Address in diesem Beispiel eine echte Klasse ist, hat man Konstruktor- und Methodenaufrufe, die das ganze um Größenordnungen langsamer machen als die C-Variante; wenn es keine echte Klasse ist, hat man eine Sprache, in der alles wie eine Klasse aussieht, einiges aber keine Klasse ist. Auch nicht wahnsinnig sauber.

    Scheint mir nur ein weiterer C-Klon zu sein, ich sehe da keine großen Reformen.


    Naja, was sind "große Reformen"? Schon allein Support für Klassen und für Schleifenkonstrukte mit Typinferenz für Laufvariable deuten auf alles andere als einen C-Klon hin. Erweiterung ja vielleicht, ist ja auch nicht unbedingt schlecht. Wie auch ein "Klon", der einige der nervigeren Probleme beseitigt, nicht unbedingt schlecht wäre.

    Zitat

    Ich würde mir eine hardwarenahe Sprache mit java-ähnlicher Syntax wünschen (was aber anscheinend ein Widerspruch in sich sein dürfte).


    Was meinst du mit Syntax? Für "hardwarenahe" Programmierung ist z.B. die von dir blöd gefundene Unterscheidung zwischen Stack- und Heapobjekten (Zeiger/Referenzen vs. nicht-Zeiger/Referenzen) wichtig.

    Macht er aber in dem Fall eh - durch Einbindung der Headerdateien. Nur wenn A.h resp. B.h _nicht_ eingebunden werden sollen, muss man "class X" forward deklarieren.


    Die Einbindung ändert nichts daran, daß es zyklische Abhängigkeiten zwischen den Klassen gibt. Die Deklaration von B kommt vor jeglicher Deklaration von A, also gibts bei der Deklaration "A* a;" einen Fehler.

    Zitat

    Und die Fehlermeldung wäre auch interessant!


    g++ liefert da, wie leider oft bei unbekannten Typen, nur einen syntax error ohne nähere Details.

    Oder meinst Du was ganz anderes und bist nur nicht fähig das Ganze in deutsche Sätze zu fassen?


    Das muß es sein. Ich probiere es mit einfachen Hauptsätzen. Write-Only Memory ist ein Witz. Haha, lustig. Oh, der vorige Satz war kein Hauptsatz. Er hatte kein Verb. Write-Only Memory ist ein Witz. Write-Only Memory war schon immer ein Witz. Write-Only Memory gibt es nicht. Du verstehst das nicht. Alle halten dich für blöd. Alle lachen über dich.