C-Anfängerfrage

Gast #1209858
Lesenswert?

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 #1209880
Lesenswert?

"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 #1209882
Lesenswert?

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

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