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


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.