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)


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)


Lesenswert?

Andreas G. schrieb:
> Geht das nicht

Richtig beobachtet.

von N. G. (newgeneration) Benutzerseite


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:
1
#include <cstdio>
2
3
void foo(int a, bool b=false) {
4
    printf("int=%d, bool=%s\n", a, b?"true":"false");
5
}
6
7
int main() {
8
    foo(42, true);
9
    foo(42);
10
    return 0;
11
}
Gibt aus Ausgabe:
1
int=42, bool=true
2
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)


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


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)


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]
  • [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.