Forum: Mikrocontroller und Digitale Elektronik PIC xc8: Error "initialization of function arguments is illegal"


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Andreas G. (beastyk)


Bewertung
0 lesenswert
nicht lesenswert
Moin,

ich habe versucht bei meiner Funktion/Funktionsbezeichner den 
Argumenten, am Anfang meines Projektes, gleich einen Wert mit auf den 
Weg zu geben.
Das geht entweder nicht oder aber ich mach das falsch.
Als Beispiel:

unsigned char Funktion(unsigned char Argument = 0, bool CRC_A = false);

Geht das nicht, wie macht man es dann richtig?

Gruß
dat
Beast

von Georg G. (df2au)


Bewertung
0 lesenswert
nicht lesenswert
Andreas G. schrieb:
> Geht das nicht

Richtig beobachtet.

von N. G. (newgeneration) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Andreas G. schrieb:
> Moin,
>
> ich habe versucht bei meiner Funktion/Funktionsbezeichner den
> Argumenten, am Anfang meines Projektes, gleich einen Wert mit auf den
> Weg zu geben.
> Das geht entweder nicht oder aber ich mach das falsch.

Wozu soll das gut sein?
Es gibt die Möglichkeit in einigen Sprachen (z.B. C++) Argumenten 
default-Werten zuzuweisen, die dann beim Aufrufen weggelassen werden 
können.

> Als Beispiel:
>
> unsigned char Funktion(unsigned char Argument = 0, bool CRC_A = false);
>
> Geht das nicht, wie macht man es dann richtig?
In C geht das nicht, richtig.

In C++ würde es so aussehen:
#include <cstdio>

void foo(int a, bool b=false) {
    printf("int=%d, bool=%s\n", a, b?"true":"false");
}

int main() {
    foo(42, true);
    foo(42);
    return 0;
}
Gibt aus Ausgabe:
int=42, bool=true
int=42, bool=false
Also im Prinzip so wie du es machen wolltest.
Aber eben nur in C++, nicht in C.

Mit freunclichen Grüßen,
N.G.

von Andreas G. (beastyk)


Bewertung
0 lesenswert
nicht lesenswert
N. G. schrieb:
> Also im Prinzip so wie du es machen wolltest.

Jaaa, es ist exakt so wie ich das gern hätte, und auch bei dem 
Arduino-Code gesehen hab...wenn es aber nicht geht dann werde ich die 
fehlenden default-Werte händisch beim Aufruf der Funktion zuschreiben.

Gruß
Beast

von N. G. (newgeneration) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Andreas G. schrieb:
> wenn es aber nicht geht...

Ich kenne den Compiler nicht, aber kann der kein C++?
Benenne doch testweise einfach mal deine Source-Datei in .cpp und und 
probiere einen Compile-Vorgang.

(Fast) Jeder C-Code ist auch legitimer C++-Code, das bedeutet, wenn die 
dieses Feature soo wichtig ist kannst du dein Projekt auf C++ umstellen.
Dann hättest du auch noch ein paar andere super C++-Features.

Hängt natürlich vom Compiler ab.

Aber im Ernst: nur deswegen würde ich nicht auf C++ umsteigen, dann 
würde ich mehr davon verwenden.
Ich wollte nur die Möglichkeit klar stellen ;-)

Mit freundlichen Grüßen,
N.G.

von Anduino macht dumm (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Jaaa, es ist exakt so wie ich das gern hätte, und auch bei dem
> Arduino-Code gesehen hab.

Sei froh das XC8 keine Faust hat.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.