Go Down

Topic: 2 gleichnamige Funktionen in der Library (Read 1 time) previous topic - next topic

voithian

Quote

Könnt Ihr Literatur über solche und andere Feinheiten der Arduino-Programmierung empfehlen ( Buch, aber auch Web-Tutorial)?

Das hat ja (fast) nichts mit Arduino-Programmierung tun, sondern ist ja reines C++. Genauso wie deine Beschäftigung mit den Pointern.

Da gibt es eine ganze Reihe von Fachbüchern zu diesen Themen, aber ich würde einfach mal mit google auf die Suche nach c++ und tutorial gehen. Da dürfte sich sicherlich einiges finden lassen. Anschauen und zum Lernen verwenden, wenn es gefällt.

spaceball

Hallo,
angenommen ich habe nun 2 Funktionen.
   void func (int i) { }
   void func (byte i) { }
Die erste wird aufgerufen, wenn als Wert ein int-Wert, die zweite, wenn ein byte-Wert übertragen wird.
Wenn ich nun aber beim Funktionsaufruf einen fixen Wert direkt eintrage:
   void func ( 222 );
Wie kann ich nun sicher sein, welche der beiden Möglichkeiten verwendet wird?
   void  func ( int 222 );     ???????
oder:
   int a = 222;
   void func (a);
Die letzte Möglichkeit ist halt genau das, was ich nicht wollte, nämlich eine optische Verlängerung des Codes und weniger Übersicht.....
Da kann ich gleich 2 verschiedennamige Funktionen nehmen.

Danke im Voraus für Eure Hilfe
Reinhard

Udo Klein

Welche Funktion aufgerufen wird hängt von den verwendeten Typen ab. Damit irgendetwas den gewüschten Typ bekommt verwendet man einen Typecast, also

Code: [Select]

f((int) a);
f((byte) a);


erzwingt, daß a einmal als int und einmal als byte übergeben wird und damit werden dann (falls vorhanden) die Funktionen mit der passenden Signatur angesprochen.
Check out my experiments http://blog.blinkenlight.net

hammerhai

Ich bin mir nicht ganz sicher aber in
Code: [Select]
func ( 222 );
sollte der Compiler die 222 als int interpretieren wenn man nicht explizit was anderes angibt.
Aber solche Mehrdeutigkeiten sollte man besser vermeiden, also wie schon geschrieben im Zweifel lieber explizit casten.

Udo Klein

Wenn a eine Konstante ist (was ich nicht vorausgesetzt habe), dann kann man den Typ auch durch geeignete Suffixe erzwingen. Wenn man sich nicht sicher ist, dann sollte man nicht auf das Compilerverhalten hoffen. 2 Wochen später weiß man sonst nicht mehr was man sich eigentlich dabei gedacht hat --> dann lieber gleich explizit den Typ erzwingen.
Check out my experiments http://blog.blinkenlight.net

Go Up