#ifdef includes und funktionsdeklarationen (arduino)

OP #4092605
Lesenswert?
• ▲
▼
ich hab ein Arduino Sketch welches für 2 unterschiedlich Ethernet 
shields  compilierbar sein soll
also hatte ich:

#ifdef W5100
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
EthernetUDP Udp;
#else
#include <EtherCard.h>
#include <IPAddress.h>
#endif

das ist aber GANZ böse, weil (irgendwer) aus irgend einem grund genau 
VOR die erste Variable (auch wenn diese per ifdef garnicht "existiert")
alle funktionen nochmal "deklariert" (ich weiß nicht wie das in C heißt)
Grund ist vermutlich dass sich funktionen so gegenseitig aufrufen können 
sollen?!
DANACH wird aber wohl das alles wieder entfernt (dank ifdef) und der 
code kompiliert nicht ..


das ließ sich noch recht einfach lösen (wenn man mal weiß was das 
Problemist) indem die erste Variable einfach in keinem IFDEF sein darf..


2. Problem:
eine funktion die einen typen verwendet der in EtherCard.h definiert 
ist:
(hier BufferFiller)

static void homePage (BufferFiller& buf);

wird auch IMMER vor dieser 1. Variable deklariert, auch wenn die ganze 
funktion dank IFDEF überhaupt nicht existiert..

im preprocessor output sieht man das alles recht gut, nur lösung für 2. 
problem hab ich noch keine..

wie macht man sowas "korrekt"??
Gast #4092617
Lesenswert?
• ▲
▼
Woraus ergibt sich denn die Notwendigkeit das "richtig" zu machen?

An sich sehe ich in dem beschriebenen Zustand keine Ursache für ein 
Problem (mit etwas Vorbehalt, da ich Arduino normalerweise nicht mal mit 
der Kohlenzange anfassen würde).
OP #4092650
Lesenswert?
• ▲
▼
minnimalcode welcher sich nicht compilieren lässt (zu Problem 2)
1
im Anhang

sketch_apr15a.ino:15:23: error: variable or field 'homePage' declared 
void
sketch_apr15a.ino:15:23: error: 'BufferFiller' was not declared in this 
scope
sketch_apr15a.ino:15:37: error: 'buf' was not declared in this scope
Error compiling


"RICHTIG" machen möchte ich ganz einfache: die funktion "homepage" gibt 
es nicht wenn W5100 definiert ist..
Angehängte Dateien:
OP #4092668
Lesenswert?
• ▲
▼
hier noch der minnimalcode zu beispiel 1
1
#define semmel
2

3
#ifdef semmel
4
int dummy = 0;
5
#endif
6

7
int dummy2 = 0;
8

9
void fA(int i) {
10
 if (i==1) {
11
   fB(i++);
12
 }
13
}
14

15

16
void fB(int i) {
17
 if (i==1) {
18
 }
19
}
20

21
void setup() {
22
  // put your setup code here, to run once:
23
  fA(1);
24
  fB(1);
25
}
26

27
void loop() {
28
  // put your main code here, to run repeatedly:
29

30
}

enfernt man das #define semmel lässt er sich nicht mehr compilieren..

ifdeftest2.ino: In function 'void fA(int)':
ifdeftest2.ino:18:10: error: 'fB' was not declared in this scope
Error compiling.
OP #4092688
Lesenswert?
• ▲
▼
Rufus Τ. Firefly schrieb:
> Robert L. schrieb:
>> die funktion homepage ist im #ifndef ...
>
> Hmm. Doch. Hast recht.
>
> Benenne das W5100 mal um in irgendwas anderes; möglicherweise steht
> irgendwo in irgendeiner Headerdatei ein #undef W5100 drin ...

auch wenn man alle W5100 durch X5100 ersetzt passiert das selbe..

(einfach den obigen preprozessor output anschauen, dort homepage suchen, 
dann sollte klar sein was ich meine)
Persönliche Seite #4092732
Lesenswert?
• ▲
▼
Robert L. schrieb:
> ifdeftest2.ino: In function 'void fA(int)':
> ifdeftest2.ino:18:10: error: 'fB' was not declared in this scope
> Error compiling.

Das ist ja auch klar, Dir fehlt da eine sogenannte 'forward 
declaration'. Zu dem Zeitpunkt kennt der Compiler 'fB' noch nicht.
1
void fA(int);
2
void fB(int);

Direkt über Deine Funktionsdefinitionen und das sollte laufen!
Gast #4092874
Lesenswert?
• ▲
▼
den code den ich hier gepostet habe, lässt sich problemlos compilieren
Beitrag "Re: #ifdef includes und funktionsdeklarationen (arduino)"

(einfach mal ausprobieren, arduino ide 1.0.x oder 1.6.x , passiert bei 
beiden,..)

>forward declaration

werden automatisch erstellt dass ist ja mein "Problem"

 (ohne forward declaration würde er sich ja nicht compilieren lassen)

erst wenn man das
#define semmel
weglässt kommen Fehlermeldungen


(wer das automatisch macht, weiß ich nicht, gcc g++ precompiler, keine 
Ahnung.. aber das wäre ja die Frage an die Experten)
#4092895
Lesenswert?
• ▲
▼
lrlr schrieb:
> nachtrag: hab es gefunden:
>
> https://github.com/arduino/Arduino/issues/2406

Genau wegen so einem hirnrissigen Scheiß ist es nicht empfehlenswert als 
Anfänger mit Arduino anzufangen oder auch als Fortgeschrittener es 
überhaupt jemals zu benutzen. Da bekommst Du als Anfänger vollkommen 
falsche (oder gar keine) Vorstellungen wie was zusammenhängt und als 
jemand der schon lange mit C und C++ uterwegs ist rechnest Du nicht im 
Traum damit daß jemand ernsthaft auf die Idee gekommen ist sich so einen 
hirnverbrannten Mist auszudenken, Du rechnest einfach nicht damit weil 
das sowas von daneben ist daß Du es von vornherein als unwahrscheinlich 
ausschließt.

Deshalb: Wirf die Arduino-Umgebung in die Tonne und mach normales C(++) 
mit nem normalen Editor oder ner normalen IDE die nicht eigenmächtig und 
stillschweigend hintenrum am geschriebenen Code herum manipuliert.
Gast #4092903
Lesenswert?
• ▲
▼
Na ja. Ich habe ja Arduino schon vorher abgelehnt und das ist noch ein 
Grund.

Man kann ja die Absicht der Entwickler, wie sie in dem Fehlereintrag 
beschrieben ist, durchaus nachvollziehen, aber sie hat nur dann einen 
Sinn, wenn jemand mit Arduino anfängt, der dann um des Spaghettimonsters 
willen niemals auf die Idee kommt, was mit C zu machen. Das gibt ein 
Kuddelmuddel sondergleichen. Allen anderen, welche die Absicht haben, 
irgendwann mal zu programmieren wie es die Profis machen, kann man nur 
von Arduino abraten.

Bei mir kommt das Wort "Arduino" nunmehr in den Filter. Solche Beiträge 
schaue ich mir gar nicht mehr an. Das war jetzt der letzte Tropfen der 
das Fass zum überlaufen brachte. Sollen diejenigen, die damit Probleme 
haben, bitte in den zweifellos vorhandenen und darauf spezialisierten 
Foren posten.
OP #4092921
Lesenswert?
• ▲
▼
zum pro/contra arduino sag ich jetzt nicht, das ist ja lächerlich...

>Wirf die Arduino-Umgebung in die Tonne und mach normales C(++)
>mit nem normalen Editor oder ner normalen IDE die nicht eigenmächtig und
>stillschweigend hintenrum am geschriebenen Code herum manipuliert.


also ich verwende atmelstudio 6.2. als IDE (für arduino)
das C (++) ist leider auch ganz normales C(++) das ist für mich viel die 
größere katastrophe als solche kleinigkeiten wie das hier .. (aber eine 
pascal vs. C diskussion wollen wir hier jetzt auch nicht, oder ;-)

und wegen der Hardware selber: ich kann es einfach nicht anders, und ob 
ich mir jetzt irgend eine fertiges "demoboard" hole oder arduino ist 
doch das selbe...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren