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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.