![]() |
|
|
|||||||
| Portal | Wiki | IRC-Chat | Registrieren | Benutzerliste | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
![]() |
|
|
Themen-Optionen | Thema bewerten | Ansicht |
|
|
#1 |
|
Profifragensteller
|
Moin!
Kurz und knapp: Warum geht das hier nicht? Code:
Wo ist dieser Code unlogisch und fehlerhaft? Danke im Voraus sagt der Neugierige Herakles |
|
|
|
|
|
#2 |
|
Registered User
Registrierungsdatum: Jul 2004
Beiträge: 117
|
Ich würde mal tippen, dass der Präinkrement-Operator den um Eins erhöhten Wert von i als Konstante liefert. Und dieser Konstante kannst Du mit %= natürlich keinen neuen Wert zuweisen.
Evtl. mal den Postinkrement-Operator probieren, oder noch besser: Das Ganze in zwei Anweisungen schreiben. Also erst inkrementieren, dann den Divisionsrest zuweisen. Ein weiterer Vorteil ist, dass man dann auch die Woche drauf noch den eigenen Code versteht. ;-) Und Variablen am besten gleich bei der Erzeugung mit einem definierten Wert belegen. |
|
|
|
|
|
#3 |
|
Lion King Fan
Registrierungsdatum: May 2004
Ort: Pride Rock
Beiträge: 1.331
|
Ich glaube das ist egal, denn "++i" steht ja fuer "i = i + 1", wobei bei "++i" "i" zurueckgegeben wird und bei "i++" "i + 1", was beides rvalues sind, denen man wie du schon sagtest nichts zuweisen kann.
Vllt warten wir da auch mal auf Tron, der ist doch unser Compiler Experte. ![]()
__________________
HP: Simba - The Lion King |
|
|
|
|
|
#4 |
|
Anfänger
|
++i ist kein L-Value (hat keine Speicheradresse)
und noch eine Kleinigkeit: i ist nicht initialisiert -> undefiniertes Verhalten Festplatte könnte formatiert werden |
|
|
|
|
|
#5 |
|
Parasprite
|
Ähm ... nein.
__________________
[ bsdlogo 2.0 - Wiki - Ports - LibreOffice Pakete - PM schreiben - kamikaze@bsdforen.de ]
Disclaimer: My posts represent my perception. Errors and incompleteness are to be expected, I deny any responsibility to know everything. |
|
|
|
|
|
#6 |
|
the unseen one
Registrierungsdatum: Dec 2006
Ort: Biberach an der Riß
Beiträge: 461
|
Das ist so nicht richtig. In einem der C-Standards (ich glaube es ist C99, Tron weiß das sicherlich genauer) ist festgelegt, dass nicht explizit initialisierte Variablen implizit mit 0 initialisiert werden.
__________________
Man kann auf seinem Standpunkt stehen, aber man sollte nicht darauf sitzen. (E. Kästner) |
|
|
|
|
|
#7 |
|
Parasprite
|
Egal welchen C-Standard man nimmt. Es ist vollkommen egal was in i steht. In der konkreten Anwendung birgt eine uninitialisierte Variable keine Gefahr.
Ich schreibe in der Regel immer noch ANSI-C und habe keine Ahnung was so in C99 passiert. Ich verwende auch Erweiterungen wie Enums nicht, weil ich Enums ohne Typsicherheit mächtig sinnlos finde.
__________________
[ bsdlogo 2.0 - Wiki - Ports - LibreOffice Pakete - PM schreiben - kamikaze@bsdforen.de ]
Disclaimer: My posts represent my perception. Errors and incompleteness are to be expected, I deny any responsibility to know everything. |
|
|
|
|
|
#8 | |
|
Anfänger
|
Zitat:
An die "Styleguides" an die ich mich halten muss/will steht: immer initialisieren. Mir ist es lieber. Aber das ist sicher auch alles eine Geschmacksfrage. |
|
|
|
|
|
|
#9 |
|
Anfänger
|
Boa....bin zu doof auf die schnelle was im Standard dazu zu finden.
Warte jetzt auch mal auf Tron ![]() |
|
|
|
|
|
#10 |
|
Profifragensteller
|
Kurz am Rande zu dem Exkurs in Richtung "nicht initialisiert". Ich hab den Code hier einfach in das Editierfenster geschrieben und dabei habe ich einen Flüchtigkeitsfehler gemacht. Bitte geht davon aus, das im obigen Code
Code:
![]() Grüße Herakles |
|
|
|
|
|
#11 |
|
Anfänger
|
Das hatte ich mir schon gedacht.
Drum auch das mit der Festplatte löschen ![]() (der Vergleich ist aber aus einem C++ Buch von Scott Meyers) |
|
|
|
|
|
#12 |
|
Parasprite
|
Das spricht gegen das Buch.
__________________
[ bsdlogo 2.0 - Wiki - Ports - LibreOffice Pakete - PM schreiben - kamikaze@bsdforen.de ]
Disclaimer: My posts represent my perception. Errors and incompleteness are to be expected, I deny any responsibility to know everything. |
|
|
|
|
|
#13 |
|
Possessed With Psi Powers
|
Naja, kommt halt drauf an, wo man sich befindet. Unter richtigen Betriebssystemen sollte das Rechtemanagement tunlichst verhindern, dass so etwas passiert. Zumindest solange man im Userland ist. Aber unter primitiven Systemen wie DOS ist es durchaus denkbar. Rein theoretisch gesprochen, ich bezweifele, dass ein im undefinierten Bereich arbeitendes Programm wirklich mal eine Festplatte gelöscht hat.
![]()
__________________
Eure Tastatur verfügt nicht umsonst über zwei Shift-Tasten! Benutzt sie bitte, denn sonst ist es mir fast unmöglich euere Posts zu entziffern. Homepage: http://www.yamagi.org | Yamagi Quake II: http://www.yamagi.org/quake2
|
|
|
|
|
|
#14 |
|
Profifragensteller
|
Back to topic, please!
Ich finde das "andere" Thema zwar auch interessant, aber warum macht ihr dafür nicht fix nen neuen Thread auf? das wäre nett... ![]() Herakles |
|
|
|
|
|
#15 |
|
Registered User
Registrierungsdatum: Apr 2004
Beiträge: 268
|
Jeder Operator in C liefert ein Ergebnis, manche haben auch Nebenwirkungen (Zuweisung: Wert einer Variablen ändern, Funktionsaufruf: quasi beliebiges im Speicher ändern). Dieses Ergebnis ist bis auf wenige Ausnahmen immer ein rvalue. Diese Ausnahmen sind Variablen, unärer *, [], . und -> (und seit C99 auch compound literals). Nur diese Ausdrücke liefern einen lvalue, also etwas, an das zugewiesen werden kann (alle Varianten der Zuweisung) oder von dem die Adresse bestimmt werden darf (unäres &).
Selbst wenn ++i einen lvalue liefern würde, dann wäre das Verhalten von ++i %= 5; undefiniert, da zwischen zwei aufeinanderfolgenden Sequenzpunkten (hier Anfang und Ende der Anweisung) das selbe Objekt mehrfach modifiziert werden würde. ++i heißt nicht umsonst Präinkrement: Erst Variable um eins erhöhen, dann den neuen Wert zurückgeben. i++ erhöht auch den Wert von i um eins, aber liefert den vorherigen Wert von i. |
|
|
|
![]() |
| Dieses Thema betrachten zurzeit 1 Personen. (0 registrierte Benutzer und 1 Gäste) | |
| Themen-Optionen | |
| Ansicht | Thema bewerten |
|
|
Ähnliche Themen
|
||||
| Thema | Erstellt von | Forum | Antworten | Letzter Beitrag |
| Oracle Instant Client Version | MASTEQ | FreeBSD - Anwendungen und Ports | 15 | 05.11.2009 13:04 |
| version FBSD_1.1 required | Herrmann | FreeBSD - Installation | 7 | 05.10.2008 21:19 |
| Grafik und Soundprobleme | Bomba | FreeBSD - Installation | 6 | 25.07.2007 23:49 |
| Postfix + SASLv2 + MySQL + Courier-IMAP | Bummibaer | FreeBSD - Anwendungen und Ports | 42 | 05.01.2005 22:39 |
| Postfix, Courier-Imap, mit Sasl2 und MySQL Authentifizierung | vanedler | FreeBSD - Anwendungen und Ports | 4 | 26.12.2004 13:41 |