C Private Variablen Methoden zum Abrufen und Festlegen

7

Ich arbeite in C und habe einige Variablen, die ich nicht global sein möchte, aber ich möchte Methoden für sie bekommen und einstellen lassen, auf die "Globaly" außerhalb der Datei zugegriffen werden kann. Ich bin es gewohnt, dies in Java zu tun, aber C ist auf diese Weise sehr unterschiedlich. Im Grunde bin ich auf der Suche nach etwas, das diesem Pseudo-Code folgt, aber ich konnte nirgends Beispiele finden, die ich mir ansehen könnte.

%Vor%     
Reid 25.04.2012, 16:38
quelle

5 Antworten

10

Sie machen die Variable static . Wenn eine globale Variable static gemacht wird, ist ihr Gültigkeitsbereich auf die aktuelle Datei beschränkt.

Ein Beispiel ist wie folgt:

Dateiname: main.c

%Vor%

Dateiname: header.h

%Vor%

Dateiname: header.c

%Vor%

Ausgabe:

%Vor%     
Sangeeth Saravanaraj 25.04.2012, 16:47
quelle
7

Wenn Sie private Variablen in c haben wollen, gibt es eine Reihe von Techniken, die eine private Variable annähern können, aber die C-Sprache hat eigentlich kein "Schutz" -Konzept, das sich auf privat, öffentlich, geschützt erstreckt (wie C ++) ).

C zeigt den Namen einer beliebigen Variablen an (es ist eine Voraussetzung in C), also müssen Sie sich mit der Idee von Informationen befassen, die den Typ der Variablen verbergen Dereferenzierung ziemlich schwierig).

Ein Trick besteht darin, die Variable als void* zu definieren, wobei der tatsächliche Variablentyp nur in einem .c -Modul bekannt ist.

%Vor%

Eine bessere Methode besteht darin, diese Idee mit dem Schlüsselwort struct zu erweitern und Pseudo-Methoden wie zB

zu erstellen %Vor%

Techniken wie diese haben mehrere Varianten, eine ist eine "öffentliche Struktur" mit einem void * Zeiger auf die "private Struktur". Einer besteht darin, die "Methoden" als Funktionszeiger in die "public struct" aufzunehmen (ein Schritt zur Unterstützung von Polymorphismus), einer ist eigentlich ein vollständiges und richtiges C ++ Typsystem zu schreiben, das Dinge genau so zu lösen versucht wie C ++ (Klassenhierarchien, Polymorphismus, späte Bindung, Informationsverbergung, usw.).

Im Grunde genommen können Sie eine "objektorientierte" Eigenschaft ohne zu viel Arbeit erreichen, aber wenn Sie weitere Funktionen der -Ornamentierung hinzufügen, fügen Sie mehr Gleitcode hinzu (bis viel einfacher ist tatsächlich eine objektorientierte Programmiersprache zu verwenden).

    
Edwin Buck 25.04.2012 16:45
quelle
2

Sie können Folgendes eingeben:

%Vor%

Auf diese Weise exportiert ".o" die Variable "c" nicht.

    
user1202136 25.04.2012 16:41
quelle
1

In Ihrem Beispiel können Sie versuchen, einige struct mit diesen Informationen zu verwenden. A struct ist wie ein class mit nur öffentlichen Elementvariablen (d. H. Keine Funktionen). Überlege dir also etwas wie folgt

%Vor%

Wie Sie sehen können, funktioniert C nur mit Objekten und Funktionen. Um eine globale Variable für alle Dateien zu erhalten, versuchen Sie es mit static int c = 0;

Das obige Beispiel ist fast so nah wie möglich an eine "Java-style" Konvention.

    
RageD 25.04.2012 16:48
quelle
1
%Vor%     
md5 25.04.2012 17:02
quelle