Hi @ all,
ich habe eine Funktion geschrieben, die fehlerhafte Parameterübergaben
an Funktionen verhindern soll. Normalerweise läuft diese Funktion auch…
Aber wenn ich sie z.B. 2 Mal hintereinander aufrufe, kommt es zu einer
Fehlfunktion. Hier die Funktion:
Pascal Schröer schrieb:> Kann mir dazu jemand helfen? Die Fehlfunkion äußert sich darin, dass der> Wert von *value_in unmögliche Werte annimmt.
und das wundert dich?
du castest deine Parameter von 8bit auf 32bit und weist dann den 32bit
etwas zu. Damit überschreibst du die fleißig den speichern.
Pascal schrieb:> Ja ich weiß^^ aber hättest du einen lösungsvorschlag für mich? Ich> möchte ja quasi eine "universal" funktion schreiben... Was kann ich tun?
es geht so nicht.
Schreibe zur not eine Funktion für jeden Datentyp, oder mache es als
Makro.
Easylife schrieb:> sorry, muss natürlich
dürfte auch nicht zuverlässig funktionieren.
> value_in < value_min
hier wird der 8bit wert der nur auf 32bit gecastet ist, mit 32bit
verglichen. Keiner kann sagen was in den restlichen 24bit steht.
Peter II schrieb:> hier wird der 8bit wert der nur auf 32bit gecastet ist, mit 32bit> verglichen. Keiner kann sagen was in den restlichen 24bit steht.
Doch. Kann man.
Da hier kein Pointer gecastet wird, sondern der Wert selber, wird er
kontrolliert und entsprechend den C Regeln auf 32 Bit aufgeblasen.
Bei Casts muss man unterscheiden zwischen Casts, die nur den Datentyp
verändern und solchen, die auch eine tatsächliche Aktion, wie eine
Wertveränderung, nach sich ziehen.
Einen Pointer umcasten gehört zur ersten Kategorie. Einen Wert umcasten
gehört normalerweise zur zweiten Kategorie.
Karl Heinz schrieb:> Da hier kein Pointer gecastet wird, sondern der Wert selber, wird er> kontrolliert und entsprechend den C Regeln auf 32 Bit aufgeblasen.
oh, hatte ich übersehen das er jetzt keinen Pointer mehr übergibt.
Eine eigene Frage?
Dieser Thread ist über 12 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.