Forum: Mikrocontroller und Digitale Elektronik Variable bei Funktionsaufruf deklarieren


von Reev (Gast)


Lesenswert?

Guten Abend,

Gibt es bei C einen funktionalen Unterschied zwischen den beiden 
folgenden Abläufen?
1
...
2
foo_0;
3
foo_1();
4
uint8_t a= foo_2();
5
foo_3;
6
...
und
1
uint8_t a=0;
2
foo_0;
3
foo_1();
4
a = foo_2();
5
foo_3;
Ich verwende den MSP430-Compiler vn TI (CCS v4)

Ebenso, dachte ich immer, dass man seine Variablen deklariert und dann 
den Programmablauf nachstellt. Hat das einen rein stilistischen / 
Übersichts- Charakter?
Ist das z.B. richtig?
1
uint8_t a=0;
2
alle_initfunktionen();
3
4
uint8_t b=2;
5
foo_1();
6
b = foo_2();
7
foo_3;

von Mark B. (markbrandis)


Lesenswert?

Das hier:

foo_0;

ist schon mal kein gültiger C-Code.

von Mark B. (markbrandis)


Lesenswert?

Reev schrieb:
> Ist das z.B. richtig?
>
1
> uint8_t a=0;
2
> alle_initfunktionen();
3
> 
4
> uint8_t b=2;
5
> foo_1();
6
> b = foo_2();
7
> foo_3;
8
>

In dem Beispiel wird die Variable a gar nicht benutzt. Dann ist es 
sinnlos sie überhaupt anzulegen.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Mark B. schrieb:
> Das hier:
>
> foo_0;
>
> ist schon mal kein gültiger C-Code.

Wer weiß, das ist C ...
1
#define foo_0 foo0()

SCNR xD

von Baer (Gast)


Lesenswert?

Mark B. schrieb:
> Das hier:
>
> foo_0;
>
> ist schon mal kein gültiger C-Code.

Hast du schon einmal in C programmiert? Nein? Ist auch besser so.

von Peter II (Gast)


Lesenswert?

Mark B. schrieb:
> foo_0;
>
> ist schon mal kein gültiger C-Code.

doch ist es.


ist gibt nur eine Warnung:

test.c:6:3: warning: statement with no effect [-Wunused-value]
   foo;

von Reev (Gast)


Lesenswert?

Stimmt, es muss natürlich
1
...
2
foo_0();
3
...
heißen!!! Hätte ich natürlich sehen müssen.

Auch die Variable a ... sie ist sinnlos, das stimmt. Offenbar ist mein 
Beispiel ungeschickt gewählt ...

Kann mir jemand die Fragen beantworten, welche ich eingangs gestellt 
hatte?

von Dr. Sommer (Gast)


Lesenswert?

Reev schrieb:
> Gibt es bei C einen funktionalen Unterschied zwischen den beiden
> folgenden Abläufen?

Nein, und die meisten Compiler machen daraus exakt den gleichen Code 
(Optimierung).

Reev schrieb:
> Ebenso, dachte ich immer, dass man seine Variablen deklariert und dann
> den Programmablauf nachstellt.

Hat man früher so gemacht (bzw musste man bei alten Sprachen). "Heute" 
deklariert man seine Variablen erst genau dann, wenn man auch einen 
sinnvollen Wert für sie hat - so kann man nie versehentlich eine 
Variable ohne richtigen Wert verwenden. Dass man in der klassischen 
Variante auf einen Blick alle Variablen sieht ist m.M.n weniger 
wichtig/nützlich.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Reev schrieb:
> Gibt es bei C einen funktionalen Unterschied zwischen den beiden
> folgenden Abläufen?

Nein, nur ist die erste aufgeführte Variante nicht mit alten Compilern 
verwendbar. Das mancherorts* immer noch verbreitete C89 erlaubt 
Variablendefinitionen nur am Anfang eines Blocks (d.h. nach einer 
öffnenden geschweiften Klammer), das wurde mit C99 aufgeweicht.


*) so z.B. im C-Compiler des Microsoft Visual Studio.

von Mark B. (markbrandis)


Lesenswert?

Baer schrieb:
> Mark B. schrieb:
>> Das hier:
>>
>> foo_0;
>>
>> ist schon mal kein gültiger C-Code.
>
> Hast du schon einmal in C programmiert? Nein? Ist auch besser so.

Jemand, der Ahnung von C hat, schreibt keine völlig sinnfreien 
"Statements with no effect" hin.

Peter II schrieb:
> doch ist es.
>
>
> ist gibt nur eine Warnung:
>
> test.c:6:3: warning: statement with no effect [-Wunused-value]
>    foo;

Na gut, dann ist es eben kein sinnvoller Code. Nicht einmal beim IOCCC 
würde man sowas hinschreiben. Zudem wird kein Compiler der Welt daraus 
irgend einen Maschinencode generieren.

Aber Ihr gehört wahrscheinnlich auch zu den Leuten, die darauf bestehen 
dass eine leere Datei formal gültigen C-Code enthält. ;-)

: Bearbeitet durch User
von Reev (Gast)


Lesenswert?

Danke für eure Antworten!

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.