Forum: Compiler & IDEs Peripherie definitionen


von C Newbie (Gast)


Lesenswert?

Kann mir als Anfänger mal jemand folgende Konstruktion erklären:


typedef struct
{
  __IO uint32_t CTRL;     /**< Control Register  */
  __IO uint32_t CNT;      /**< Counter Value Register  */
  __IO uint32_t COMP0;    /**< Compare Value Register 0  */
  __IO uint32_t COMP1;    /**< Compare Value Register 1  */
  __I uint32_t  IF;       /**< Interrupt Flag Register  */
  __IO uint32_t IFS;      /**< Interrupt Flag Set Register  */
  __IO uint32_t IFC;      /**< Interrupt Flag Clear Register  */
  __IO uint32_t IEN;      /**< Interrupt Enable Register  */

  __IO uint32_t FREEZE;   /**< Freeze Register  */
  __I uint32_t  SYNCBUSY; /**< Synchronization Busy Register  */
} RTC_TypeDef;            /** @} */


#define RTC_BASE          (0x40080000UL)

#define RTC          ((RTC_TypeDef *) RTC_BASE)    <- insbesondere diese 
Zeile

Wieso die Klammern so ungewöhnlich? Was bedeutet der * ? Pointer oder 
Multiplikation?

Danke

von Rolf Magnus (Gast)


Lesenswert?

C Newbie schrieb:
> Wieso die Klammern so ungewöhnlich?

Weil es ein Makro ist. Da macht man lieber ein paar Klammern mehr, damit 
es möglichst in jedem Kontext, in dem man es sinnvoll verwenden könnte, 
auch korrekt funktioniert. Ein Beispiel, das sich etwas leichter 
verstehen läßt:
1
#define VIER 3 + 1
2
3
int main()
4
{
5
    printf("VIER mal 2 ist %d\n", VIER * 2);
6
}

Hier wird nicht etwa 8 ausgegeben, sondern 5, da bei 3 + 1 * 2 durch 
Punkt-vor-Strich-Rechnung erst die Multiplikation ausgeführt wird.

> Was bedeutet der * ? Pointer oder Multiplikation?

Pointer. RTC_TypeDef ist ein Typ. Wie soll man einen Typ mit irgendwas 
multiplizieren?

von Klaus W. (mfgkw)


Lesenswert?

C Newbie schrieb:
> #define RTC          ((RTC_TypeDef *) RTC_BASE)    <- insbesondere diese


1. Formal: Ab dieser Stelle wird jedes Token (außerhalb Strings, nicht 
innerhalb eines längeren Worts...), welches RTC lautet, durch 
((RTC_TypeDef *) RTC_BASE) ersetzt.


2. Wozu das Ganze:
RTC_BASE muß woanders definiert sein (ist der Fall als Wert), ebenso 
RTC_TypeDef (ist auch der Fall als Typ), und wenn du irgendwo später im 
Quelltext RTC schreibst, ersetzt der Präprozessor das durch 
((RTC_TypeDef *) RTC_BASE).
Dabei ist RTC_BASE ja auch definiert als (0x40080000UL), d.h. jedes RTC 
landet als ((RTC_TypeDef *) (0x40080000UL)) beim Compiler.
Der liest das so: nimm den Wert 0x40080000UL (die Klammern direkt 
drumrum ändern in diesem Fall nichts) und betrachte diesen Wert als 
einen Zeiger auf etwas vom Typ RTC_TypeDef (das ist eine Typkonversion 
bzw. cast durch voranschreiben des Typs in Klammern, also (RTC_TypeDef 
*)).

Die in diesem Fall überflüssigen Klammern (z.B. um alles rum) macht man 
bei Makros aus Gewohnheit, weil es einige Fälle gibt, die sonst 
unerwartete Ergebnisse liefern, z.B. durch Punkt- vor Strichrechnung.

von Klaus W. (mfgkw)


Lesenswert?

PS: ein gutes C-Buch ist sicher sinnvoll, um C zu  lernen.

von Karl H. (kbuchegg)


Lesenswert?

C Newbie schrieb:

> #define RTC          ((RTC_TypeDef *) RTC_BASE)    <- insbesondere diese
> Zeile


Stell dir einfach mal vor, wenn dieses Makro irgendwo verwendet wird. Zb
1
  RTC->CNT = 5;

und jetzt spielen wir Preäprozessor und lösen mal die Makros auf.
Ersetzen wir mal das Makro RTC durch seinen Ersatztext ersetzt. Dann 
entsteht daraus
1
   ((RTC_TypeDef *) RTC_BASE)->CNT = 5;

Dann gibt es noch ein Makro für RTC_BASE. Auch das setzen wir mal ein
1
   ((RTC_TypeDef *) (0x40080000UL))->CNT = 5;

Was analysieren wir da jetzt? SChlüsseln wir das mal auf.
Es beginnt bei
1
     0x40080000UL                            irgendeine Zahlenkonstante
2
3
Die Klammern sind an dieser Stelle nur insofern relevant, um damit Fehlinterpretationen in der Reihenfolge der Auswertung zu vermeiden
4
5
    (0x40080000UL)                           immer noch diese Zahl
6
7
    (RTC_TypeDef *) (0x40080000UL)           Aha. Jetzt kommen wir der Sache
8
                                             schon näher. Die Zahl wird umgecastet.
9
                                             Und zwar zu einem Pointer!
10
                                             Aber nicht einfach zu irgendeinem Pointer
11
                                             sondern zu einem Pointer auf
12
                                             RTC_TypeDef
13
14
                        D.h. die Zahl wird in weiterer Folge als Speicheradresse aufgefasst.
15
                        Und das was an dieser Adresse im Speicher zu finden ist,
16
                        das hat die Form und das Speicherlayout,
17
                        die durch RTC_TypeDef beschrieben
18
                        werden kann.
19
20
                        Ab hier greift man daher über diese Adresse auf
21
                        ein derartiges Strukturobjekt zu.
22
23
((RTC_TypeDef *) (0x40080000UL))->CNT
24
25
                        Und von diesem STrukturobjekt hätten wir gerne den
26
                        CNT Member.
> Wieso die Klammern so ungewöhnlich?

Bei Makros gilt:
Lieber ein paar Klammern zu viel als ein paar zu wenig

> Was bedeutet der * ? Pointer oder
> Multiplikation?

Eine Multiplikation hat immer einen linken und einen rechten Operanden. 
Gibt es hier einen rechten Operanden? Nein? Dann kann es keine 
Multiplikation sein.

Man sollte doch eigentlich meinen, dass ein C Programmierer einen Cast 
erkennt, wenn er einen sieht.

von C Newbie (Gast)


Lesenswert?

Danke, aber das mit dem Makro war mir klar.

Nochmals, wieso ist der * so komisch geklammert.

Ich habe eine Struktur als Typendefinition auf der linken Seite und eine 
absolute Adresse (Constante) auf der rechten Seite.

In der Applikation ergibt dies ((RTC_typedef *) (0x40080000UL)) -> XXX = 
YYY;

Falls möglich bitte nochmals genau die Interpretation des Compilers 
erklären.

Danke

von C Newbie (Gast)


Lesenswert?

Leider zu schnell.

Danke für die Ausführliche Erklärung.

von C Newbie (Gast)


Lesenswert?

Klaus Wachtler schrieb:
> PS: ein gutes C-Buch ist sicher sinnvoll, um C zu  lernen.

Ich programmiere seit 30 Jahren Assembler, und wenn mir jemand dazu eine 
Frage stellt dann erkläre ich es ihm
....................... oder halte einfach mein Maul.

von Karl H. (kbuchegg)


Lesenswert?

C Newbie schrieb:
> Klaus Wachtler schrieb:
>> PS: ein gutes C-Buch ist sicher sinnvoll, um C zu  lernen.
>
> Ich programmiere seit 30 Jahren Assembler, und wenn mir jemand dazu eine
> Frage stellt dann erkläre ich es ihm

Das ist aber nicht sinnvoll, wenn du C lernen willst.

Ich spreche auch seit 30 Jahren mehr oder weniger fliessend ENglisch als 
Umgangssprache. Hilft mir nur überhaupt nichts, wenn ich mich auf 
Italienisch versuche.

> ....................... oder halte einfach mein Maul.

Ok.
Und Tschüss.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

C Newbie schrieb:
> Ich programmiere seit 30 Jahren Assembler, und wenn mir jemand dazu eine
> Frage stellt dann erkläre ich es ihm

Bei bestimmten Themen ist eine systematische Herangehensweise 
zielführender als eine häppchenweise Versorgung mit Information.

"Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre 
einen Mann zu fischen und du ernährst ihn für sein Leben."

Konfuzius, *551 v. Chr. †479 v. Chr.

> ....................... oder halte einfach mein Maul.

Sehr gern. Und auch tschüss...

von C Newbie (Gast)


Lesenswert?

Ich dachte ich habe mein Posting eindeutig auf das Zitat bezogen, leider 
haben es anscheinend auch andere auf sich bezogen.

Ich helfe Leuten auf meinem Gebiet wenn ich es kann.  Assembler ist hier 
ein nicht exklusives Beispiel.

Der schon obligatorische Hinweis auf Buch, Google oder sonstwas von 
"Spezialisten" hilft mir nicht und bei solchen Kommentaren denke ich mir 
immer "hätte er nur geschwiegen".

Hiermit möchte ich nochmals ausdrücklich folgenden Personen danken, für 
die sinnvollen und ausführlichen Erklärungen:

Rolf Magnus, Klaus Wachtler und Karl Heinz

Ich hoffe dass diese auch weiterhin Fragen in diesem Forum ernsthaft und 
kompetent benatworten.

von Karl H. (kbuchegg)


Lesenswert?

C Newbie schrieb:

> Ich helfe Leuten auf meinem Gebiet wenn ich es kann.  Assembler ist hier
> ein nicht exklusives Beispiel.

Darum gehts überhaupt nicht.

Es geht darum, dass man C nicht (ausschliesslich) durch anlassbezogenes 
Fragen und den Erwerb von Achtelwissen (denn das ist noch nicht einmal 
Halbwissen) in Foren lernen kann.
C als Sprache ist zu umfangreich und voll von zu vielen kleinen Fallen, 
als das man auf eine systematische EInführung (zb in Form des 
Durcharbeitens eines Lehrbuches) verzichten kann. Sehen wir hier im 
Forum jeden Tag x-mal.

Das selbst nach Durcharbeiten eines Lehrbuches (und das ruhig mehrmals) 
noch etliche Fragen zu diversen Feinheiten offen bleiben liegt in der 
Natur der Sache. Dann ist der Zeitpunkt gekommen, an dem ein Forum 
sinnvoll helfen kann.
Einem 8-jährigen, der gerade mal seine ersten SChritte in Mathe macht, 
kann ich nun mal nicht die Feinheiten der Differentialrechnung 
erläutern. Da ist eine viel zu große Lücke zwischen dem was er bereits 
weiss und dem was er wissen sollte, bevor es Sinn macht sich mit ihm 
über Grenzwerte zu unterhalten.

von C Newbie (Gast)


Lesenswert?

Hallo Karl Heinz

ich bin nicht ganz der Anfänger. Ich versuche C-Programme zu verstehen 
und auch hinter die Logik der Definitionen zu kommen.
Anscheinend ist dies heute nicht mehr selbstverständlich. Wen 
interessiert es wo die Register der RTC liegen? Der Hersteller wird das 
schon richtig definiert haben. Solange man weiß RTC->IFC ist das 
Interrupt Flagregister reicht das den meisten.

Ich wollte nachvollziehen wie dies definiert wird.
Von der main.c -> em-rtc.h -> efm32zg222f32.h -> efm32zg_rtc.h -> 
core_cm0plus.h

Ich bin hier am Type cast gescheitert und dies steht so in keinem mir 
bekannten Lehrbuch oder Wiki. Deshalb gibt es ja diese Forum.

Es ist natürlich schwierig zu unterscheiden wer hier anfrägt, der 
13jahrige, der noch nie eine uC programmiert hat oder jemand der an 
einem, an sich einfachen, Problem hängen geblieben ist.

Allerdings muss ich zugeben der Name war blöd gewählt.

von Karl H. (kbuchegg)


Lesenswert?

C Newbie schrieb:
> Hallo Karl Heinz
>
> ich bin nicht ganz der Anfänger.

Ich weiss schon, dass du Assembler programmierst.

Das ist hier aber nicht der Punkt.

****************************************
In C  BIST DU Anfänger
****************************************

Und das ist kein Vorwurf. Der VOrwurf bezieht sich nur darauf, wie du 
damit umgehst. Ob du aus Selbstgefälligkeit denkst "so wild kann das 
schon nicht sein", oder ob du akzeptierst, dass du in C bei 0 anfängst 
und auch entsprechend agierst. Zb. mit dem Ankauf und dem Durcharbeiten 
eines C-Buches.

> Anscheinend ist dies heute nicht mehr selbstverständlich.

Erzähl mir bitte nicht, was heute nicht mehr selbstverständlich ist. Als 
ich gelernt habe, war es selbstverständlich sich seine Informationen 
überall zusammensuchen zu müssen - Internet gab es noch lange keines.
Damals war es selbstverständlich, dass man bei jeder neuen Sprache erst 
mal einen Gang in die Uni-Bibliothek macht um sich dort eines der 
wenigen Bücher zu dem Thema zu krallen. Und wenn man keines ergattern 
konnte, dann war es selbstverständlich in den sauren Apfel zu beissen 
und sich eines zu kaufen - die Bedeutung von Lebensmitteln wird sowieso 
überschätzt :-)

> Ich bin hier am Type cast gescheitert und dies steht so in keinem mir
> bekannten Lehrbuch

Echt nicht?
EIn Lehrbuch, in dem ein Cast nicht beschrieben ist?

Schmeiss es weg und kauf dir ein ordentliches. Das ist so, wie wenn du 
mir verklickern willst, in einem Englisch Lehrbuch sind die Formen von 
'to be' nicht für alle Personen aufgeführt (I am, You are, He/She/It is, 
We are, You are, They are). Das glaub ich dir einfach nicht! Und ja. 
Genau auf diesem SChwierigkeitsniveau bewegen wir uns hier. Wenn du 
eienn Cast nicht erkennst, dann bist du C-Anfänger. Und es hilft dir 
nichts, wenn du zig andere Sprachen beherrscht - das ändert daran 
nichts.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

C Newbie schrieb:

> Ich bin hier am Type cast gescheitert und dies steht so in keinem mir
> bekannten Lehrbuch oder Wiki. Deshalb gibt es ja diese Forum.

Die Lehrbücher sind voll davon:

  http://www.win-tux.de/c_009_000.htm#Xxx999328

von C Newbie (Gast)


Lesenswert?

Frank M. schrieb:
> C Newbie schrieb:
>
>> Ich bin hier am Type cast gescheitert und dies steht so in keinem mir
>> bekannten Lehrbuch oder Wiki. Deshalb gibt es ja diese Forum.
>
> Die Lehrbücher sind voll davon:
>
>   http://www.win-tux.de/c_009_000.htm#Xxx999328

Hier wieder ein eher schlechtes Beispiel.

Cast von long in float in short und umgekehrt als Beispiel zu einer 
Frage zu einem Cast pointer einer structur, zudem irrsinnig mit 
whitespace und Klammern verziert.

Wer Multiplikation verstehen will dem hilft die Addition nur bedingt.

von Karl H. (kbuchegg)


Lesenswert?

C Newbie schrieb:

> Hier wieder ein eher schlechtes Beispiel.
>
> Cast von long in float in short und umgekehrt als Beispiel zu einer
> Frage zu einem Cast pointer einer structur

Es ist völlig wurscht. Der springende Punkt besteht darin, dass der Cast
1
   (typ) ausdruck

ausdrückt: Ich will an dieser Stelle, dass der 'ausdruck' als vom Typ 
'typ' aufgefasst wird. Das verlinkte Buch macht sich nur in einem Punkt 
schuldig, nämlich dass es nicht erwähnt, dass es 2 Arten von Casts gibt
* die einen, die eine tatsächliche Aktion zur Laufzeit erfordern. Das 
wäre ein Cast wie beschrieben, wenn von einem double zu einem int 
konvertiert wird. Da wird tatsächlich zur Laufzeit geackert
* und die andere Art von Cast, wo man den Compiler im Prinzip anweisst: 
Tu einfach mal so, als ob 'ausdruck' vom Typ 'typ' wäre. Praktisch alle 
Casts, in denen ein Pointer involviert ist, sind von diesem Typ. Zur 
Laufzei tut sich da nichts. Der Cast ist die Operator-Aufforderung an 
den Compiler: tu so, als ob ... Der Rest ist dann einfach nur: in 
welcher Reihenfolge werden Ausdrücke aufgelöst, und da steckt man dann 
halt dieses 'tu so als ob' als ganz normale Operation mit rein.

Aber syntaktisch ist es immer gleich. Egal welchen Datentyp 'ausdruck' 
hat, nach Anwendung eines Casts darauf
1
    (typ) ausdruck
hat es in weiterer Folge im Zusammenhang der kompletten Expression den 
Datentyp 'typ'. Das ist so, wie der Operator
1
     - ausdruck
im Kontext der Auswertung einer Expression das negative von 'ausdruck' 
zur Verfügung stellt.
Ein Cast ist ein ganz normaler Operator, wie jeder andere auch, der 
etwas bewirkt.


> zudem irrsinnig mit
> whitespace und Klammern verziert.

und?
Wenn du die Operator Precedence Regeln von C kennst, hindert dich ja 
niemand daran, die überflüssigen Klammern in Gedanken zu entfernen.
Ooops da haben wir dann auch schon wieder die nächste Baustelle: 
Operator Precedence Regeln.
Und so ergibt eben eine Wissenslücke die nächste.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

C Newbie schrieb:
> Cast von long in float in short und umgekehrt als Beispiel zu einer
> Frage zu einem Cast pointer einer structur, zudem irrsinnig mit
> whitespace und Klammern verziert.

Ich hätte nicht gedacht, dass eine gedankliche Übertragung so schwer 
ist:

 (int)           - cast auf Integer
 (int *)         - cast auf Pointer-To-Integer
 (RTC_TypeDef *) - cast auf Pointer-To-RTC_TypeDef

Die Syntax dahinter ist doch immer dieselbe.

Du behauptest einfach frech, C-Bücher würden solche Casts nicht 
behandeln. Das Gegenteil ist der Fall: Casts sind elementar und werden 
deshalb in jedem C-Buch behandelt.

P.S.
Dir ist wahrscheinlich nicht zu helfen. Vermutlich warst Du auch nie in 
einer Fahrschule, sondern hast die Verkehrsregeln durch Anwenden von 
konkreten Unfällen in Zusammenarbeit mit der Polizei häppchenweise 
gelernt.

von C Newbie (Gast)


Lesenswert?

Frank M. schrieb:

> Ich hätte nicht gedacht, dass eine gedankliche Übertragung so schwer
> ist:
>
>  (int)           - cast auf Integer                      soweit OK
>  (int *)         - cast auf Pointer-To-Integer           Wie kommt man darauf?
>  (RTC_TypeDef *) - cast auf Pointer-To-RTC_TypeDef       Wenn man obiges weiß 
ist dies auch OK
>
> Die Syntax dahinter ist doch immer dieselbe.

Warum nicht gleich so, das ist doch eine brauchbare Antwort.

Allerdings kann ich keine "logische" Syntax erkennen. Wieso steht der 
Stern hinter dem Typ? Wieso innerhalb der Klammern und nicht außerhalb, 
oder ist das das gleiche? Ist das Leerzeichen zwischen Typ und Stern 
zwingend oder kann es weggelassen werden?
>
> Du behauptest einfach frech, C-Bücher würden solche Casts nicht
> behandeln. Das Gegenteil ist der Fall: Casts sind elementar und werden
> deshalb in jedem C-Buch behandelt.
>
Wenn man schon einen Link postet, dann einen richtigen. Pointer Casts 
werden hier behandelt http://www.win-tux.de/c_014_010.htm



> P.S.
> Dir ist wahrscheinlich nicht zu helfen.

Stimmt nicht, die (guten) Antworten haben mir geholfen und mein Problem 
gelöst. Was mich stört ist die arrogante Art in der hier manche 
auftreten. Macht ihr das mit euren "Real life" Kollegen auch so? Wenn 
ein Mitarbeiter eine technische Frage hat empfehlt ihr ihm ein Buch zu 
lesen? Oder gebt ihr als Antwort "Lern erst mal die Grundlagen, dann 
kannst Du mich wieder fragen"? Oder bekommt der Kollege zur Antwort 
"Ooops da haben wir eine Wissenslücke"? Aber vielleicht arbeitet ihr ja 
in Firmen wo alle auf eurem Level sind und sich sowieso keiner Fragen 
traut.
So wirds bald auch in diesem Forum laufen, denn ein Anfänger der diesen 
Post liest überlegt sich dreimal ob er hier eine Frage stellt.

Wieso bloß melden sich so viele Leute nie wieder nach ihrem 
Eröffnungspost?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

C Newbie schrieb:
> Allerdings kann ich keine "logische" Syntax erkennen. Wieso steht der
> Stern hinter dem Typ?

Er steht immer hinter dem Typ. Ein C-Buch erklärt das systematisch.

> Wieso innerhalb der Klammern und nicht außerhalb,

Weil das Sternchen mit zum Typ gehört. Ein Integer ist etwas ganz 
anderes als ein Pointer-To-Integer.

> oder ist das das gleiche?

Nein, natürlich nicht.

> Ist das Leerzeichen zwischen Typ und Stern
> zwingend oder kann es weggelassen werden?

Auch das wird normalerweise in einem guten C-Buch erklärt. Whitespaces 
dienen - solange es eindeutig ist - nur der besseren Übersichtlichkeit. 
Ich empfehle generell, großzügig damit umzugehen.

von Karl H. (kbuchegg)


Lesenswert?

C Newbie schrieb:

> Macht ihr das mit euren "Real life" Kollegen auch so? Wenn
> ein Mitarbeiter

Wenn ein Mitarbeiter sich bei mir vorstellt, weil er im Team mitarbeiten 
will und er hat Fragen auf diesem Niveau, dann ist er schneller wieder 
bei der Tür draussen als er "Pap" sagen kann.
Was anderes ist es, wenn ich einen Auszubildenden habe. Aber dann weiss 
ich von vorne herein, dass es mindestens 1 Jahr dauert, bis ich ihn 
produktiv einsetzen kann. Und diese Zeit kriegt er auch. Und in dieser 
Zeit kriegt er eine fundierte Ausbildung. Und ja. Das bedeutet auch, 
dass er in der ersten Woche von mir einen Kernighan&Ritchie überreicht 
bekommt.

> lesen? Oder gebt ihr als Antwort "Lern erst mal die Grundlagen, dann
> kannst Du mich wieder fragen"?

Selbstverständlich!
Oder würdest du zu einem praktischen Arzt gehen, der noch nicht mal ein 
Heftpflaster aufkleben kann.
Ideen haben die Leute heutzutage!


> in Firmen wo alle auf eurem Level sind

Um das mal klar zu stellen.
Deine Fragen sind auf C-Kindergartenniveau!
Wenn du mit solchen Fragen in einer Firma auftauchst, dann setzen die 
dich vor die Tür! Und ja. Die sagen dir: lern erst mal wenigstens die 
Grundlagen und in einem halben Jahr, wenn du dann wenigstens ein bischen 
C kannst, dann unterhalten wir uns weiter. Aber so hat das keinen Sinn. 
Mit diesem Wissenstand und Können können wir dich hier momentan als C 
Programmierer nicht brauchen.
Oder würdest du einen Schlosser einstellen, der nicht mit einem 
Schraubenzieher umgehen kann und dem du erst mal den Umgang mit dem 
Schweissbrenner beibringen musst?
Oder als Spediteur einen Fahrer, der nicht rückwärts einparken kann?
Oder einen Buchhalter, der mit den Begriffen 'Soll' und 'Haben' nichts 
anfangen kann.
Oder ...

Egal in welchem Beruf, es gibt immer einen gewissen Grundstock der 
vorausgesetzt wird, wenn ich mich in dieser Funktion bewerbe. Dass man 
einige Details nicht kennt, ist eine andere Sache. Hier geht es aber 
nicht um irgendwelche obskuren Details - hier geht es um Grundlagen. Von 
irgendwelchen obskuren Details sind deine Fragen allesamt weit weit 
entfernt.
Wie soll ich denn mit dir diskutieren, ob wir einen Red-Black-Tree 
einsetzen oder doch einen Binary-Tree oder vielleicht eher eine 
Hash-Map, wenn ich dir erst mal 2 Tage lang das Konzept von Pointern 
erklären muss und dir in 3 Monaten die Grundlagen von dynamischen 
Datenstrukturen erläutern müsste nur um dann erst recht deinen Code 
hinter dir aufräumen und debuggen zu müssen (denn du wirst da böse 
Fehler einbauen. Nicht umsonst geht die Vorlesung 'dynamische 
Programmierung' an der Uni über 2 Semester)? Sorry, da verzichte ich auf 
deine Mitarbeit und such mir einen, der das alles in seiner 
grundlegenden Ausbildung schon durch hat, selbst wenn ich ihm eine 
Schnelleinführung geben muss, was sich hinter einem Red-Black-Tree 
verbirgt.

von C Newbie (Gast)


Lesenswert?

Karl Heinz schrieb:

abgesehen vom ersten Post verringert sich das Niveau von Karl Heiz's 
Posts rapide.

> Um das mal klar zu stellen.
> Deine Fragen sind auf C-Kindergartenniveau!

Anscheinend gibt es für fehlerfreie Speziaisten nichts Schöneres als 
weniger Wissende zu beleidigen.

Von einem "Moderator" (von lateinisch moderare ‚mäßigen‘, ‚steuern‘, 
‚lenken‘) ist eine Person, die ein Gespräch lenkt oder in einer 
Kommunikation vermittelt.  (C) Wikipedia.

hätte ich mir mehr erwartet. Einfach mal über die eigene Rolle im Forum 
nachdenken.

Trotzdem ein schönes Wochenende

von Klaus W. (mfgkw)


Lesenswert?

C Newbie schrieb:
> hätte ich mir mehr erwartet. Einfach mal über die eigene Rolle im Forum
> nachdenken.

Voschlag:
1. von oben her nach der ersten beleidegenden Äußerung im Thread suchen
2. sehen, von wem sie stammt
3. testen, ob das Karl-Heinz war

von Klaus (Gast)


Lesenswert?

Naja. Immer das selbe hier.

Karl Heinz "Don Quichotte de la Mancha" kämpft gegen die Windmühlen der 
Un... <da kann man so verschiedenes für die Punkte einsetzen>.

Früher haben wir solche Anfängerfragen höchstens beantwortet, wenn klar 
war, das derjenige an sich sehr motiviert war und nur nicht an die 
richtigen Quellen kam.
Heute sollte (gerade jemand der 30 Jahre Assembler programmiert und 
damit wohl älter als 40 ist) wissen, dass man nicht nur ein Buch zum 
Thema liest sondern mindestens drei. Dann fallen einem auch die 
"vereinfachenden Weglassungen" des Cast-Themas, der 
Auswertungsreihenfolge und des Operator-Vorranges auf.

Aber nein. Wir streiten eher darum, warum ihr nicht lieb seid. :-)

von Karl H. (kbuchegg)


Lesenswert?

Klaus schrieb:

> Aber nein. Wir streiten eher darum, warum ihr nicht lieb seid. :-)

Wie leider so oft, wenn man einem Fragesteller versucht klar zu machen, 
dass das was er schon als 'ausserordentlich' ansieht in Wirklichkeit 
noch nicht mal unterstes akzeptables Mindest-Niveau ist.
Aber was erwartet man von einer Welt, in der die Anforderungen in den 
Schulen immer mehr zurückgeschraubt werden, damit die Kinderchen nicht 
reihenweise durchfallen. Anstatt das Niveau zu heben, senkt man eben den 
Bewertungsschlüssel. In der Statistik kommt das aufs gleiche raus.

von Klaus W. (mfgkw)


Lesenswert?

uiuiui, bist du heute aber geladen!

Nur als Bremse: wenn er schon seit Jahrzehnten programmiert, wird ihn 
die heutige Schule nicht versaut haben (es sei denn er ist Lehrer) :-)

von PittyJ (Gast)


Lesenswert?

Ich prgrammiere seit 30 Jahren in C, Assmebler und diversen anderen 
Sprachen.

Letztens mußte ich etwas in Ruby machen. Also bei Amazon geschaut, und 
das Buch war am nächsten Tag da. Dann habe ich mich in die Konzepte 
eingelesen und etwas mit dem Code gespielt.

Das mit dem Buch funktioniert heutzutage immer noch.

von Christian B. (casandro)


Lesenswert?

Karl Heinz schrieb:
>> Ich programmiere seit 30 Jahren Assembler, und wenn mir jemand dazu eine
>> Frage stellt dann erkläre ich es ihm
>
> Das ist aber nicht sinnvoll, wenn du C lernen willst.

Doch Assembler ist eine Grundvoraussetzung um C zu lernen... trotzdem 
kann es keinen systematischen Einstieg in C ersetzen. Somit ist der 
Hinweis auf ein gutes C-Buch absolut gerechtfertigt. C hat nun mal eine 
Menge seltsamer Sprachfeatures über die man halt mal stolpert und die 
dann, wie bei Makros, unter Umständen auch kritische Fehler verursachen 
können.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.