Pages: [1]   Go Down
Author Topic: Anfänger Frage: #define  (Read 366 times)
0 Members and 1 Guest are viewing this topic.
Bochum, Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Zusammen,

ich bin hier ein absoluter Neuling und oute mich als VB Coder smiley-wink
Da ich mich in das MultiWii Projekt einlese stoße ich auf Probleme, den Code zu verstehen.

Diese Zeile verstehe ich nicht:

  #define LEDPIN_PINMODE             pinMode (13, OUTPUT);pinMode (30, OUTPUT);     // Pin 60 (PC7)

Wenn ich die Doku zu #define lese, steht dort, dass es bei #define kein Semikolon geben darf.
Dieser Code ist aber offensichtlich OK.

Wie muss ich diese Zeile also lesen und verstehen?

DANKE
Carsten
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hey,

die Zeile ist einfach so zu verstehn das überall wo LEDPIN_PINMODE steht ,durch die Zeile: pinMode (13, OUTPUT);pinMode (30, OUTPUT); eingesetzt wird.

Das mit dem Semikolon ist quasi auf Konstanten bezogen,in deinem Beispielt sind es ja Funktionen.
Wenn du nach einer Konstanten in der Define direktive das Semikolon setzt(#define a 3;) und dann a+b; machst, dann ist das für den Compiler nicht zu lesen, weil das ; das ende eines Befehl angibt. Es steht also für den Compiler:
3;
+b;

Was ist denn +b ?!?!?!

Und deswegen geht das so nicht ;D

hoffe konnte das aufklären

gruß

ShuftY
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2973
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Wie muss ich diese Zeile also lesen und verstehen?

Wie es zu lesen ist, hat ShuftY richtig beschrieben.
Zu verstehen ist das als ein Beispiel für Missbrauch von c Syntax.

Der Sinn liegt evtl. darin, dass in der #define Anweisung die 13 und 30 am Anfang der Datei oder in einer speziellen Definitions-Include Datei leichter zu finden ( und evtl. anzupassen ) sind, als da wo irgendwo im folgenden Code ein mysteriöses
LEDPIN_PINMODE
steht.

"Das mit dem Semikolon" könnte man auch so machen, dass
#define LEDPIN_PINMODE             pinMode (13, OUTPUT);pinMode (30, OUTPUT)    // Pin 60 (PC7) (ohne Semikolon am Ende)

später als

  LEDPIN_PINMODE;  // sieht schon fast wie c aus

verwendet wird.
( Ein Semikolon zu viel schadet hier übrigens nicht, und ist syntaktisch erlaubt )
« Last Edit: July 31, 2012, 08:53:17 am by michael_x » Logged

Neuss
Offline Offline
Full Member
***
Karma: 1
Posts: 200
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

"Das mit dem Semikolon" könnte man auch so machen, dass
#define LEDPIN_PINMODE             pinMode (13, OUTPUT);pinMode (30, OUTPUT)    // Pin 60 (PC7) (ohne Semikolon am Ende)

später als

  LEDPIN_PINMODE;  // sieht schon fast wie c aus

verwendet wird.
( Ein Semikolon zu viel schadet hier übrigens nicht, und ist sytaktisch erlaubt )

Wobei zu bemerken wäre, dass im Sourcecode (Datei MultiWii_2_1.ino) in der Funktion setup() LEDPIN_PINMODE tatsächlich mit einem abschließenden Semikolon verwendet wird (zusätzlich zu dem Semikolon im #define in def.h) und somit ein überflüssiges Semikolon aus dem Präprozessor herauskommt.
Wie schon von michael_x gesagt ist ein einzelnes Semikolon syntaktisch zulässig (leere Anweisung) und der C/C++-Compiler wird es hoffentlich wegoptimieren.

Nichtsdestotrotz ist es für jemand, der genau hinschaut verwirrend und man sollte meiner Meinung nach entweder in MultiWii_2_1.ino das Semikolon hinter LEDPIN_PINMODE weglassen oder besser in def.h das Semikolon weglassen und stattdessen in MultiWii_2_1.ino das Semikolon hinter LEDPIN_PINMODE setzen (sieht irgendwie natürlicher aus).
« Last Edit: July 31, 2012, 04:57:37 am by voithian » Logged

Pages: [1]   Go Up
Jump to: