Xilinx SDK, #define __

OP (Firma: HS Kempten) #1702569
Servus,

die Frage bezieht sich zwar auf C Code aber ich denke in Sachen Xilinx 
Programme bin ich hier richtiger.

In den von den Xilinx Tools automatisch erstellten .c und .h Files 
tauchen viele #defines auf. z.b.
1
#ifdef __PPC__
2
#define CACHEABLE_REGION_MASK 0x80308000
3
#endif

oder
1
#ifndef __PLATFORM_CONFIG_H_
2
#define __PLATFORM_CONFIG_H_

Bedingte defines verstehe ich. Aber was bedeutet __ vor und nach dem 
PPC.

gruß
Gast
Flo J. schrieb:
> Bedingte defines verstehe ich. Aber was bedeutet __ vor und nach dem
> PPC.
Syntaktisch garnichts.

Viele Leute und Hersteller beginnen und beenden Bezeichner mit '_' oder 
'__', wenn diese intern vordefiniert sind oder nur intern benutzt werden 
sollen. Der Unterstrich zählt als Bestandteil des Bezeichners (quasi ein 
Buchstabe).
1
__PPC__
dürfte z.B. vom Compiler genau dann gesetzt werden, wenn du auf einer 
Powerpc-Architektur kompilierst.
Andere Beispiele sind z.B.
1
__LINE__ und __FILE__
(aktuelle Quelltext-Datei/-Zeile).
OP (Firma: HS Kempten)
Okay, vielen Dank.

In diesem Zug gleich noch eine Frage :P
1
struct netif {
2
/** pointer to next in linked list */
3
struct netif *next;
4
...
5
/** This function is called by the network device driver
6
*  to pass a packet up the TCP/IP stack. */
7
err_t (* input)(struct pbuf *p, struct netif *inp);
8
...

Dass in einem struct Namens netif wiederum ein Pointer desselben Typs 
netif auftaucht ist mir neu, aber erst recht verstehe ich nicht was in 
der Zeile mit err_t passiert. Funktionsaufruf mit Rückgabewert in einer 
struct Definition?

edit: Und mich stört das Leerzeichen zwischen * und input. Ein Pointer 
sieht für mich so aus: *input
Gast
Flo J. schrieb:
>
1
struct netif {
2
> /** pointer to next in linked list */
3
> struct netif *next;
4
> ...
5
> /** This function is called by the network device driver
6
> *  to pass a packet up the TCP/IP stack. */
7
> err_t (* input)(struct pbuf *p, struct netif *inp);
8
> ...
>
> Dass in einem struct Namens netif wiederum ein Pointer desselben Typs
> netif auftaucht ist mir neu,
Das ist eine verkettete Liste. Jede Struktur zeigt einfach auf die 
nächste Struktur in der Liste. Möglich ist das, da Zeiger immer 
diegleiche Größe haben (auf 32-Bit-Systemen meist 4 Bytes), d.h. die 
Sache läuft nicht 'rekursiv', wie man vermuten könnte. Ein Zeiger auf 
ein Byte braucht genauso viel Platz, wie ein Zeiger auf eine riesige 
Datenstruktur.

> aber erst recht verstehe ich nicht was in
> der Zeile mit err_t passiert. Funktionsaufruf mit Rückgabewert in einer
> struct Definition?
Jein, wichtig ist das linke Klammerpaar. Damit wird eine Zeigervariable 
namens 'input' vereinbart. Der Rest drumherum bildet den Zeigertyp, der 
ist hier: Funktion mit zwei Argumenten und Rückgabewert err_t.

Beispiel:
1
int eine_funktion(int a, char b) {
2
  /* ... */
3
}
4

5
int (*zeiger_auf_eine_funktion)(int a, char b);
6
zeiger_auf_eine_funktion = &eine_funktion;

Wobei der Adressoperator ('&') da auch wegfallen darf. Danach bewirken 
folgende Anweisungen dasselbe:
1
int ergebnis;
2
ergebnis = eine_funktion(1, 2);
3
ergebnis = (*zeiger_auf_eine_funktion)(1, 2);
Analog darf auch hier der Verweisoperator ('*') entfallen, es reicht, 
einfach zu schreiben:
1
ergebnis = zeiger_auf_eine_funktion(1, 2);


> edit: Und mich stört das Leerzeichen zwischen * und input. Ein Pointer
> sieht für mich so aus: *input
Leerzeichen, Zeilenumbrüche etc. fallen in C unter 'Leerraum'. Hier ists 
egal, ob und wo ein Leerzeichen steht.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.