Code-Schnipsel
Moderatoren: broesel, Martin Conrad, PatrickThema: Wenn bei Prorgrammaufruf nicht genau 2 Parameter angegeben werden?
Re: Wenn bei Prorgrammaufruf nicht genau 2 Parameter angegeben werden?
TP am 06.01.2006 um 20:40
Bitte ändere das noch.
Zitat:
Zitat:
Zitat:
Die doppelte Prüfung, ob *s, oder s == 0 ist können wir uns sparen, da der Abbruch so oder so funktioniert, wenn s[0] == 0 ist.
Aber wie wird dann bei deiner Version, das von dir besagte Problem, mit einem String gelöst, der nur das Nullzeichen enthällt?
Upps, hast recht. Also so:
if(!*_s)return false;
Das mit || hab ich extra gemacht, denn nur diese Überprüfung vernachlässigt die Abfrage, ob der Zeiger auf NULL zeigt.
Zitat:
Zitat:
Zitat:
Die leere Zuweisung in der for Schleife hab ich durch eine while-Schleife ersetzt und dann innerhalb von isdigit() incrementiert(Könnte man genauso in der While-Bedingung Postincrmentieren).
Das müsste man dann z.B. mit && machen, was eine zusätzliche Überprüfung darstellt, also wieder langsamer, genauso wie die jetzige Version mit der Präinkrementierung, im Vergleich zur Postinkrementierung.
Nein, du kannst auch einfach while(bla++) schreiben![]()
Das wäre wieder Postinkrementierung.
Zitat:
Warum ist eine Incrementierung unterschiedlich schnell, wenn du sie vorher oder nacher machst?
Das Speichern oder Berechnen (wenn man den Rückgabewert mit 1 subtrahiert).
Der alte Wert muss gespeichert werden, danach muss die Variable inkrementiert werden und der alte Wert zurückgegeben werden (Postinkrementierung).
Bei der Präinkrementierung wird einfach der Wert erhöht und danach zurückgegeben.
++iterator oder iterator++ bei for-schleife
Re: Wenn bei Prorgrammaufruf nicht genau 2 Parameter angegeben werden?
scusi71 am 15.10.2008 um 11:34
#include <assert.h>
#include <errno.h>
#include <limits.h>
#include <stdlib.h>
#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L
# define restrict
# define _Bool int
#endif
_Bool is_int (const char *const restrict text)
{
assert (text);
errno = 0;
char * end_ptr = NULL;
const long value = strtol (text, &end_ptr, 10);
return ( 0 == errno
&& text != end_ptr
&& '\000' == *end_ptr
&& INT_MIN <= value
&& INT_MAX >= value);
}
