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% 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%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.
Eine bessere Methode besteht darin, diese Idee mit dem Schlüsselwort struct
zu erweitern und Pseudo-Methoden wie zB
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).
Sie können Folgendes eingeben:
%Vor%Auf diese Weise exportiert ".o" die Variable "c" nicht.
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
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.
Tags und Links c private-members private-methods