Forum: Mikrocontroller und Digitale Elektronik Variable bei Funktionsaufruf deklarieren


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 Reev (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-3 lesenswert
nicht lesenswert
Das hier:

foo_0;

ist schon mal kein gültiger C-Code.

von Mark B. (markbrandis)


Bewertung
-1 lesenswert
nicht 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


Bewertung
1 lesenswert
nicht 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)


Bewertung
-2 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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) (Moderator) Benutzerseite


Bewertung
1 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Antworten!

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.