Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

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

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 <
010
05.08.2003, 15:39 Uhr
~bussibär
Gast


Das war gute Zusammenarbeit! zusammen haben wir den Fehler systematisch ausfindig gemacht, dann eingekreist und ihn gelöst...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
05.08.2003, 15:42 Uhr
0xdeadbeef
Gott
(Operator)



--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
05.08.2003, 15:43 Uhr
0xdeadbeef
Gott
(Operator)


Tschuldigung. Ich find diesen Smiley einfach toll...
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
05.08.2003, 15:46 Uhr
~bussibär
Gast


hey! du nimmst den echt oft her! ich guck halt nur aus dem fenster uns seh des tolle wetter, da darf man schon n bisserl abspacken!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
05.08.2003, 16:38 Uhr
ao

(Operator)



Zitat:
0xdeadbeef postete
Wo nimmt den C++ dann die Speicheradresse eines Registers her? Junge, junge, vielleicht ist Stroustrup wirklich allmächtig...

register ist eine Empfehlung des Programmierers, dass der Compiler doch bittschön die Variable in einem Register halten möge, wenn er nichts dagegen hat. Wenn es irgendwo im Code vorkommt, dass die Adresse gebildet werden muss, dann hat der Compiler was dagegen und lässt register unter den Tisch fallen. Wenn er lieb ist, wirft er dabei ein diagnostic.

Microsoft-C++ ist übrigens nicht lieb.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
05.08.2003, 16:56 Uhr
ao

(Operator)



Zitat:
virtual postete
Meines Wissens ist es auch in C kein Fehler.


Meines Wissens irrst du dich. Alle Dokus, die ich hier zur Verfügung habe und die zu dem Thema was sagen, machen ganz klar:

C++:
register int i;
&i;


ist ein Fehler. Wohlgemerkt, nur in C.


Zitat:

Bei inline in C++ gibt es ja ähnliche Situationen:

C++:
struct K
{
[b]virtual inline[/b] method();
}




C++ ist, wie wir festgestellt haben, in diesem Punkt weniger restriktiv. Wenn aus der Semantik folgt, dass das Objekt (Variable oder Funktion) eine Adresse haben muss, dann bekommt sie halt eine, und inline fliegt raus.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
05.08.2003, 17:38 Uhr
virtual
Sexiest Bit alive
(Operator)


@ao.
Ja, hast recht.
Ich habe mal im Draft C99 nachgeschaut, ich gehe nicht davon aus, daß sich das mit finalem Standard noch geändert hat (schaue heute abend noch mal nach).
Obwohl ich es ein wenig hart finde: wenn es eh nur eine Empfehlung ist, dann kann es der compiler ja geflissentlich übersehen, daß da "register" steht.
--
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
017
05.08.2003, 20:57 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich habe nochmal nachgeschaut:
Das sagt der C99 Standard dazu in Abschnitt 6.7.1.4

Zitat:

A declaration of an identfier for an object with storage-class specifier register suggest that access to the object be as fast as possible. The extent to which such suggestions are effective is implementation defined.


Das ganze ist mit einer Fußnote versehen:

Zitat:

The implementation may treat any register declaration simply as an auto declaration. However, whether or not addressable storage is actually used, the address of any part of an object declared with storage-class specifier register cannot be computed, either explicitly (by use of the unary & operator as discussed in 6.5.3.2) or implictly (by converting an array name to a pointer as discussed in 6.3.2.1). Thus, the only operator that can be applied to an array declared with storage-class specifier register is sizeof.


Dann ist in diesem Zusammenhang der zitiuerte Abschnitt 6.5.3.2 wichtig:

Zitat:

The operand of the unary & operator shall be either a function designator, the result of a [] or nary * operator, or an lvalue that designates an object that is not a bit-field and is not declared with the register storage-class specifier.


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 05.08.2003 um 20:59 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
06.08.2003, 09:18 Uhr
ao

(Operator)



Zitat:
virtual postete
Obwohl ich es ein wenig hart finde: wenn es eh nur eine Empfehlung ist, dann kann es der compiler ja geflissentlich übersehen, daß da "register" steht.

Stimmt, eigentlich unüblich, wo doch sonst in C fast jede Schweinerei durchgeht. Aber ich glaube, das kann man nur historisch verstehen. Früher waren die Optimizer noch nicht so ausgefuchst (wären sie es gewesen, dann hätte ein Build auf den damaligen Entwicklungsrechnern ewige Zeiten gedauert), so daß der Compiler auf ein bisschen Hilfestellung angewiesen war.

Damals war die Verwendung von register noch weit verbreitet, und es machte Sinn, gewisse Restriktionen im C-Standard zu verankern.

Heute hat sich das Thema eigentlich erledigt, also gibts auch keinen Anlass, den Standard zu ändern, um eine Restriktionen wieder auszubauen, die im Grunde keinen mehr stört.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ 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: