Variable bei Funktionsaufruf deklarieren

Gast #4866125
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;
Gast #4866170
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?
Gast #4866182
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.
Persönliche Seite #4866238
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.
#4866306
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. ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren