C-Anfängerfrage

Gast #1209858
Hallo zusammen,

ich hab schon etwas erfahrung in Assembler und möchte jetzt aber auf C 
umsteigen.

Kann mir jemand mal fragen paar fragen beantworten:

ich habe 2 C-Dateien und 2 dazu gehörende H-Datein. (FileA  FileB)

allgemeine Frage: ist es nun besser mit get/set-Methoden die Variablen 
dem jeweiligen anderen File zugängig zu machen, oder mit extern 
deklaration in der Header Datei? Mein extern gibt es ja nicht in C, aber 
der GCC Compiler unterstützt ja teils C++.

falls ich nun in FileB eine while-schleife programmiert habe in der ich 
nun von FileA eine Variable als Bedingung nutze. Beispiel:

FileB:
#include"FileA.h"
void FileB ()
{
while(Variable_FileA)
{....}
}

Falls ich nun mit "get/set" arbeiten würde, müsste ich m eine 
get-Methode in die while-Schleife mit reinpacken um so den aktuellen 
Wert der Variable zu erhalten? oder gibt es da noch einen besseren 
Programmierstil, z.B mit Zeigerübergabe?
Gast
"extern" gibt es auch in C.

Getter und Setter brauchst du, wenn:
=> Module von verschiedenen Entwicklern entwickelt werden
=> Module eine gewisse Komplexität überschreiten
=> nicht für Bastelprojekte mit 500 Zeilen Code über 3 Dateien

Auf kleinen Controllern ist es auch eine Performance-/Speicherfrage, ob 
man sich den Overhead gönnt.

Zur Schleife:

while (VariableA) {...}

Ein getter wäre sinnfrei, besser wäre dann etwas wie:

while (FileA_getSomeState() == SOME_SPECIAL_STATE) {...}
Persönliche Seite
Mit Setter/Getter arbeitet man eher im oo-Umfeld wie in Java. Die 
Kapselung bedingt einen gewissen Overhead, den man in C nicht immer 
haben will.

In C wird extern natürlich unterstützt, am einfachsten ist also
1
extern int var_a;
2
// Ende des Headers von Modul A
3

4
void foo_b(void)
5
{
6
   a = 1;
7
}

alernativ kann man das Zeug in Strukturen sammeln:

1
typedef struct
2
{
3
   int var1;
4
   ...
5
} modula_t;
6

7
extern modula_t a;
8
// Ende des Headers von Modul A
9

10
// Indirekter Zugriff
11
void foo_b2 (modula_t * pa)
12
{
13
   pa->var1 = 1;
14
}
15

16
// Direkter Zugriff
17
void foo_b3 ()
18
{
19
   a.var1 = 1;
20
}

Wenn Getter und Setter immer nur triviale Sachen machen, dann 
verschleiert das mehr, als es klar macht. Wenn man Kapselung also nicht 
braucht und erer auf kleinen, flotten Code scharf ist, würd ich drauf 
verzichten. Wenn ein Setter aber komplexere Sachen machen muss wie zB 
ein Dateizugruff oder ein Getter ne Kommunikation um an das Datum zu 
kommen, geht das schlecht mit einem Zugriff auf ne Variable.


Johann

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.