Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » funktionen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
06.10.2003, 11:15 Uhr
geissbock



hi!

ich habe ein kleines prob!
wozu dienen diese sachen?


C++:
static size_t
rcs_keyword_length(register char *base)


static-> nur für diese datei
rcs_keyword_length->name der fkt
register char *base->übergabewert
size_t->???

ich denke die ersten sachen müssten richtig sein. aber was soll das size_t?

mfg geissbock
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.10.2003, 11:21 Uhr
typecast
aka loddab
(Operator)


Static bedeutet, dass der Speicher für diese Variable nur ein mal angelegt wird, und somit im ganzen Programm bestehen bleibt. Was das aber hier soll, weiß ich nicht.

size_t ist ein Datentyp, der dafür vorgesehen ist die Größe eines Objekts zu enthalten. Es wird hier garantiert, dass die Länge des Keywords auf jeden Fall in den Rückgabewert passt. (Meistens ist size_t == unsigned int)
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.10.2003, 11:36 Uhr
Pablo
Supertux
(Operator)


Soweit ich weiß, ist eine register Variabe eine Variable, die in einem Register der Maschine gespeichert wird. Was bringt das? Das weiß ich ehrlich nicht.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.10.2003, 11:48 Uhr
geissbock



@Pablo Yanez Trujillo
register nutzt man hauptsächlich um schnellen zugriff auf variablen zu haben. weil sie werden, wie schon gesagt, in einem cpu-register und nicht im ram gespeichert.

@Loddab

C++:
register size_t len;
...
assert(strlen(cmd) < (size_t) ARG_MAX);
...
register size_t length;
...
size_t len;


das ist alles zu size_t!

Dieser Post wurde am 06.10.2003 um 12:00 Uhr von geissbock editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.10.2003, 11:54 Uhr
virtual
Sexiest Bit alive
(Operator)


static beinflusst die Sichtbarkeit (und damit eben Verwendbarkeit) von Bezeichnern. Bezeichner sind Variablen und Funktionen. static ist eine "Speicherklasse".

In der Reinen C Welt kann man static in zwei Scopes (="Gültigkeitsbereichen) verwenden: einmal im Funktionsscope zum anderen im Übersetzungseinheitsscope. In beiden Fällen bewirkt static, daß die Variable/Funktion nur im umgebenden Scope sichtbar ist:

C++:
static int eine_var = 100;
static int eine_func()
{
     static int x;
}


eine_var und eine_func Sind nur innerhalb der Datei nutzbar, in der sie definiert wurden. Hat man ein Program, welches aus mehreren Quelldateien besteht, so gibt es keine Möglichkeit, auf diese Bezeichner aus einer anderen Quelldateizuzugreifen.
Bei Der Variablen x Verhält es sich so, daß sie nur in eine_func Sichtbar ist, wie jede Andere lokale Variable auch. Allerdings überschreibt es die Speicherklasse auto, die normalerweise jeder lokalen Variablen mitgeliefert wurde. auto bewirkt, daß die Variable nach Verlassen der Routine gelöscht wird. Da das auto durch static außer Kraft gesetzt wird, bleibt die Variable über Funktionsaufrufe hinaus erhalten, wie loddab richtig erwähnt.
In der C++ Welt gibt es noch als gültigen Scope Klassen, worauf auch static angewendet werden kann.

Da das obige relative Abstrakt ist, hier nochmal die Erklärung, wie man es anwendet:

static bei einfachen Variablen: Bewirkt wie erwähnt, daß die Variable ihren Wert über zwei Funktionsaufrufe behält. Im unterschied zu einer ordinären globalen Variable ist sie allerdings nur im umgebenden Scope (Klasse, Übersetzungseinheit, Funktion) sichtbar. Während man bei Übersetzungseinheiten und Funktionen nicht von aussen auf die Variable zugreifen kann, ist dies bei static Variablen mit hilfe des Scope-Resolution-Operators möglich:

C++:
class X
{
public:
     static int y;
};
...
X::y = 1; // "::" ist der Scope-Resolution-Operator




static bei Funktionen folgt den gleichen Regeln Variablen: Funktionen die lokal in einer Übersetzungseinheit sind, lassen sich auch nur dort verwenden. Man benutzt static hier also, um soetwas wie "lokale Funktionen" zu erreichen, wobei "lokal" als "lokal zu einem Modul" zu verstehen ist, da man meist in einer C Datei ganze Module implementiert, nicht nur einzelne Funktionen (was aber auch vorkommt).
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.10.2003, 11:55 Uhr
typecast
aka loddab
(Operator)


Verstehst du was an dem Auschnitt nicht?
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.10.2003, 11:57 Uhr
virtual
Sexiest Bit alive
(Operator)


Acho, register:
Auch register ist eine Speicherklasse, wie static eben auch. Wird bei den meisten Compilern inzwischen ingoriert, weil die von sich aus ganz gut optimieren. register ist eine Empfehlung an den Compiler, die entsprechende Variable in einem CPU register zu halten.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.10.2003, 11:58 Uhr
geissbock



für die umfangreiche erklärung zu static.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.10.2003, 12:04 Uhr
geissbock



@Loddab
besonders diese zeile ruft bei mir verwunderung auf:

C++:
size_t len



sonst ist es eigentlich klar
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
06.10.2003, 12:06 Uhr
typecast
aka loddab
(Operator)


Meinst du weil gleichzeitig zwei Variablen mit dem gleichen Namen deklariert sind?
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: