Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   -- in C & Pointer (https://www.delphipraxis.net/107649-c-pointer.html)

ferby 31. Jan 2008 01:18


-- in C & Pointer
 
Hallo,

Ich schreib grad mein erstes großes C Programm (XML Pharser ;-) )

Dabei habe ich folgendes



int *Pfad_Tag_Nr;


so jetzt weiß ich einenen Wert zu und dann kommt die Zeile

*(Pfad_Tag_Nr)--;

Ich will den Wert auf den der Pointer zeigt um eins erniedrigen,
leider kommt da ein Pfusch raus. (Glaub die Adresse wird um eins erniedrigt)

Mit
*(Pfad_Tag_Nr)=*(Pfad_Tag_Nr)-1;


gehts.


Meine Frage is jetzt:

Wenn

*(Pfad_Tag_Nr)--;

nicht das gleiche wie

*(Pfad_Tag_Nr)=*(Pfad_Tag_Nr)-1;

ist, was ist dann

*(Pfad_Tag_Nr)--;

ausgeschrieben???


Verwende Visual Studie 2005

JasonDX 31. Jan 2008 01:39

Re: -- in C & Pointer
 
Es geht um Operatorenprioritäten. -- hat eine höhere Priorität als der Dereferenzierungs-Operator (*), die Binäre Subtraktion - wird allerdings erst nach dem * ausgewertet.
Sprich hier wie der Parser deine Ausdrücke interpretiert:
Code:
*(p)--
wird zu
*(p--)

*p = *p - 1
hingegen zu
(*p) = ((*p) - 1)
hier findest du (nach unten scrollen oder nach "priority" suchen) die Operator-Prioritäten, in welcher Reihe sie ausgewertet werden ;)

greetz
Mike

ferby 31. Jan 2008 02:21

Re: -- in C & Pointer
 
Also wäre das was ich will

Delphi-Quellcode:
(*(Pfad_Tag_Nr))--

JasonDX 31. Jan 2008 02:32

Re: -- in C & Pointer
 
Zitat:

Zitat von ferby
Also wäre das was ich will

Delphi-Quellcode:
(*(Pfad_Tag_Nr))--

Ja - durch die Klammerung spezifizierst du, dass die Dereferenzierung vor der Dekrementierung durchgeführt werden soll.
Falls der Term alleinstehend ist, kannst du die Klammern auch sparen, und das ganze so lösen:
Code:
--*Pfad_Tag_nr;
Wobei man dann pro gespartem Zeichen 2 extra Kommentare berechnen darf :lol:

greetz
Mike

alzaimar 31. Jan 2008 07:55

Re: -- in C & Pointer
 
Dieser Thread ist ein Paradebeispiel dafür, wie gut C und C++ wirklich ist.
Zitat:

Zitat von JasonDX
Wobei man dann pro gespartem Zeichen 2 extra Kommentare berechnen darf :lol:

Speziell der letzte Post zeigt dies eindrucksvoll.

Frage: Wieso schreibst Du 2008 dein erstes C-Programm? Wieso nicht C#? Das ist eine schöne Sprache. Fast so hübsch wie Delphi.

Xong 31. Jan 2008 08:00

Re: -- in C & Pointer
 
Zitat:

Zitat von alzaimar
Frage: Wieso schreibst Du 2008 dein erstes C-Programm?

Vielleicht weil C an Universitäten immer noch als Beispielsprache gelehrt wird.
Und diese Sprache hatte nicht ohne Grund so viel Erfolg. Auch heute noch wird es bei der maschinennahen Entwicklung genutzt.

alzaimar 31. Jan 2008 08:12

Re: -- in C & Pointer
 
Zitat:

Zitat von Xong
Zitat:

Zitat von alzaimar
Frage: Wieso schreibst Du 2008 dein erstes C-Programm?

Vielleicht weil C an Universitäten immer noch als Beispielsprache gelehrt wird.

So wie Brainfuck :mrgreen:

Nee, is schon klar, war nur etwas Polemik und OT von mir. Genug jetzt. :zwinker:

DMW 31. Jan 2008 19:25

Re: -- in C & Pointer
 
Zitat:

Zitat von alzaimar
Dieser Thread ist ein Paradebeispiel dafür, wie gut C und C++ wirklich ist.

Glücklicherweise sagt der THread nichts über die Qualität von C und insbesondere C++ in den richtigen Händen aus ;)

alzaimar 1. Feb 2008 07:03

Re: -- in C & Pointer
 
Zitat:

Zitat von DMW
Glücklicherweise sagt der Thread nichts über die Qualität von C und insbesondere C++ in den richtigen Händen aus ;)

Och, C ist nicht 'besser' als Delphi, nur weiter verbreitet. Aber das ist eh eine Glaubensfrage und bevor wir uns duellieren, einigen wir uns auf 'Jedem das Seine' und freuen uns täglich neu über Exploits, die Dank der weiten Verbreitung und Sicherheit dieses Makro-Assemblers entdeckt werden.

Wie Du schon sagtest: In den richtigen Händen ist C eine total geil kompakte und auch sichere Sache. Leider gibt es nicht so viele 'richtige Hände'.... Das gilt aber auch für (fast) jede andere Sprache.

Was ich hier blöd finde, ist die Mehrdeutigkeit (im Verständnis) eines Ausdruckes wie *p--. Ich meine, das ist die kürzeste Klausurfrage in der IT:
Zitat:

Erkläre *p--

Xong 1. Feb 2008 07:10

Re: -- in C & Pointer
 
Zitat:

Zitat von alzaimar
Was ich hier blöd finde, ist die Mehrdeutigkeit (im Verständnis) eines Ausdruckes wie *p--. Ich meine, das ist die kürzeste Klausurfrage in der IT:
Zitat:

Erkläre *p--

Das macht sie aber auch so reizend. Am gereiztesten reagier ich immer auf... *scnr* :mrgreen:

DMW 1. Feb 2008 18:18

Re: -- in C & Pointer
 
Zitat:

Zitat von alzaimar
Och, C ist nicht 'besser' als Delphi, nur weiter verbreitet.

Natürlich nicht. Aber wer vergleicht denn C und Delphi?


Zitat:

Zitat von alzaimar
Aber das ist eh eine Glaubensfrage und bevor wir uns duellieren, einigen wir uns auf 'Jedem das Seine' und freuen uns täglich neu über Exploits, die Dank der weiten Verbreitung und Sicherheit dieses Makro-Assemblers entdeckt werden.

Wie Du schon sagtest: In den richtigen Händen ist C eine total geil kompakte und auch sichere Sache. Leider gibt es nicht so viele 'richtige Hände'.... Das gilt aber auch für (fast) jede andere Sprache.

Eigentlich betonte ich doch "insbesondere C++". C ist für heutige Verhältnisse schon minimalistisch. Mit C++ aber kann man Dinge anstellen, von denen ich in Delphi nur träumen würde. (Natürlich hat auch Delphi seine Vorzüge. Insbesondere vermisse ich in C++ die ausführliche RTTI.)

Insofern ist es nicht Glaubens-, sondern Bedarfsfrage. Die meisten meiner Programme bestehen aus zwei getrennten Teilen: die eigentliche Implementation, die in C++, sowie das GUI, das mit der VCL in C++Builder (also gewissermaßen Delphi mit C++-Syntax) geschrieben ist. Und das ist gut so.

Buffer-Overflows und die anderen üblichen Bugs können in C++ übrigens mit ausreichender Erfahrung und den richtigen Werkzeugen (z.B. das in C++Builder enthaltene CodeGuard) genausogut umschifft oder gefunden werden wie in Delphi. Und wer die Sprache C++ richtig einsetzt (also intensiv Gebrauch von Stackobjekten, Smart-Pointers, Containern, Templates etc. macht und die direkte Benutzung von Zeigern, C-Bibliotheksfunktionen, new und delete meidet), produziert auch schon aus Prinzip keine Buffer-Overflows, Lecks oder dergleichen. Nur das berüchtigte C/C++, also eine unausgegorene Mischung aus prozeduraler, zeigerorientierter C- sowie objektorientierter C++-Programmierung, ist eine ernsthafte Gefahr.


Zitat:

Zitat von alzaimar
Was ich hier blöd finde, ist die Mehrdeutigkeit (im Verständnis) eines Ausdruckes wie *p--. Ich meine, das ist die kürzeste Klausurfrage in der IT:
Zitat:

Erkläre *p--

Ja, die Operatorprioritäten sind etwas unübersichtlich. Daher habe ich auch meist eine Prioritätentabelle dabei.
Der findige Programmierer lernt diese Tabelle vor Klausuren auswendig und benutzt im realen Leben immer Klammern ;)

Edit: Typographie :(

phXql 1. Feb 2008 18:41

Re: -- in C & Pointer
 
Zitat:

Zitat von Xong
Zitat:

Zitat von alzaimar
Frage: Wieso schreibst Du 2008 dein erstes C-Programm?

Vielleicht weil C an Universitäten immer noch als Beispielsprache gelehrt wird.
Und diese Sprache hatte nicht ohne Grund so viel Erfolg. Auch heute noch wird es bei der maschinennahen Entwicklung genutzt.

Ja, 1970 hat man damit noch Leute beeindrucken können... Ausser der systemnahmen Programmierung irgendwelcher Chips mit 1 KB Speicher wüsste ich nicht, wieso ich mir C antuen sollte ;) (Ah doch: sollte ich jemals auf die Idee kommen, einen kernel zu schreiben, wirds wohl doch mit c und nich mit java/c# gemacht werden :D)

SirThornberry 1. Feb 2008 18:56

Re: -- in C & Pointer
 
wie bereits erwähnt wurde wird c bei systemnaher Programmierung verwendet und hat dort auch seine Daseinsberechtigung. Wenn man einen Microcontroller mit 60 kb Arbeitsspeicher hat wovon sich das Betriebssystem auch etwas abzweigt muss man einfach auf jedes einzelne Bit achten und da ist selbst c++ schon überdimensioniert (weil einfach durch die Objecte overhead entsteht der nicht gebraucht werden kann).

Und das dieses Beispiel ein Paradebeispiel dafür ist wie gut C wirklich ist finde ich an der Stelle unpassend. Vor 1 bis 2 Tagen hatten wir hier in der dp in Delphi mal wieder das Problem das bei einer bedingten Abfrage mit and die Klammerung vergessen wurde. Und schuld das es ohne Klammern nicht lief war auch dort die Priorität der operatoren. Es hat also rein gar nichts mit der Programmiersprache c zu tun sondern einfach damit das leute die wenig/selten mit operatoren rum hantieren nicht dran denken das es dort prioritäten zu beachten gilt.


Und das c nur noch selten gebraucht wird weil die meisten Maschienen ausreichend Leistung haben um Objectoverheader ignorieren zu können halte ich für falsch.
Es ist einfach nur der erste Eindruck der meisten Leute hier im Forum die hauptsächlich mit PC's zu tun haben und somit Anwendungsentwicklung auf großen Maschienen betreiben.
Aber wenn man sich im eigenen Umfeld mal umschaut sieht man einen Drucker, eine Microwelle, einen Herd, eine Waschmaschiene, einen Boardcomputer im Auto etc. wo überall Microcontroller verwendet werden und Speicher knapp ist weil auf jeden Cent geachtet wird.

phXql 1. Feb 2008 19:43

Re: -- in C & Pointer
 
Manche Microwellen laufen mit Java.
Aber stimmt schon, C hat ne Daseinsberechtigung. Aber C für Anwendungsentwicklung auf PC / High-Level zu benutzen halte ich für nicht mehr zeitgemäß. Einfach zu unproduktiv.

alzaimar 1. Feb 2008 20:37

Re: -- in C & Pointer
 
Zitat:

Zitat von SirThornberry
... Und schuld das es ohne Klammern nicht lief war auch dort die Priorität der operatoren. Es hat also rein gar nichts mit der Programmiersprache c zu tun

Äh. Doch. Natürlich hat das was mit der Programmiersprache zu tun. C lässt zu viel Murks zu, um als gute Programmiersprache im Sinne einer Fehlerrobustheit in der Syntax durchzugehen. Für die Lehre würde ich es nicht einsetzen, wohl aber für kompakten Code. Man hat einfach 100% Kontrolle, was passiert, die Compilermagic ist 0,0 und das ist teilweise gewünscht.
Zitat:

Zitat von SirThornberry
sondern einfach damit das leute die wenig/selten mit operatoren rum hantieren nicht dran denken das es dort prioritäten zu beachten gilt.
Mit Delphi (z.B.) wär das aber nicht passiert.

:bounce1: Nä nä nä nä näää nä. :mrgreen:

Daher ist C wirklich nicht geeignet, Anfängern das Coden beizubrigen. Das ist so, als ob man mit einem 70er Jaguar das Autofahren lernt. Ohne Ausbildung als Mechaniker läuft da gar nix. Aber schick ist so ein Teil schon. Wenn's fährt...

grenzgaenger 1. Feb 2008 23:55

Re: -- in C & Pointer
 
Zitat:

Zitat von phXql
Manche Microwellen laufen mit Java.
Aber stimmt schon, C hat ne Daseinsberechtigung. Aber C für Anwendungsentwicklung auf PC / High-Level zu benutzen halte ich für nicht mehr zeitgemäß. Einfach zu unproduktiv.

es gibt aber schon noch ein paar programme, welche in C geschrieben wurden, z.b. UNIX, Windows, Oracle DB, EXCEL, WinWord, SAP R/3, etc.

also ganz ausgestorben ist die sprache mit den 16 befehlen noch nicht... ;-)

Christian Seehase 2. Feb 2008 01:23

Re: -- in C & Pointer
 
Moin Grenzgaenger,

also WinWord und Excel (2003 und 2007) wurden mit MS Visual C++ 7.0 erstellt...

grenzgaenger 2. Feb 2008 07:07

Re: -- in C & Pointer
 
Zitat:

Zitat von Christian Seehase
Moin Grenzgaenger,

also WinWord und Excel (2003 und 2007) wurden mit MS Visual C++ 7.0 erstellt...

ist doch C, mit dem compiler aus dem hause micorosoft... das spart lizenzkosten ;-)

aber auch ich vermute, dass das eine oder andere C++ feature einfloss. der code selbst basiert auf C. aber C und C++ nennt man ja zwischenzeitlich in einem atemzug C/C++, da es ja zwischenzeitlich kaum mehr einen reinen C compiler mehr gibt.

grüsse und noch einen schönen samstag
GG

phXql 2. Feb 2008 11:03

Re: -- in C & Pointer
 
Naja, zwischen C und C++ is doch noch der Unterschied OOP. Ich mag C++ auch nicht wirklich, aber es is zumindest produktiver einzusetzen als C.

cware 2. Feb 2008 20:53

Re: -- in C & Pointer
 
Zitat:

Zitat von grenzgaenger
es gibt aber schon noch ein paar programme, welche in C geschrieben wurden, z.b. UNIX [...]

wäre merkwürdig, wenn UNIX nicht in C geschrieben wäre... immerhin ist der Ursprung der Sprache die, um das System nicht mehr vollständig in ASM vorliegen zu haben...


cheers...


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz