Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

11

27.04.2009, 20:57

David_pb
Handelt es sich nicht dabei um Mindestgrößen?

also:
char <= bool <= short <= int <= long <= float <= double <= long long

Ich glaube da irgendetwas im Hinterkopf gehabt zu haben ;)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

12

27.04.2009, 20:58

Doch, bei allen Typen außer char. ;) Es ist:

1 ≡ sizeof(char) ≤ sizeof(short) ≤ sizeof(int) ≤ sizeof(long)
1 ≤ sizeof(bool) ≤ sizeof(long)
sizeof(char) ≤ sizeof(wchar_t) ≤ sizeof(long)
sizeof(float) ≤ sizeof(double) ≤ sizeof(long double)
sizeof(N) ≡ sizeof(signed N) ≡ sizeof(unsigned N)

Anonymous

unregistriert

13

27.04.2009, 21:00

Aso, dachte das Thema Mindestgröße wurde auch für char gelten, oke :)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

14

27.04.2009, 21:03

Zitat von »"unsigned long"«

Aso, dachte das Thema Mindestgröße wurde auch für char gelten, oke :)


Ja, eigentlich hast du recht. Ein char entspricht ja immer genau einem Byte und das kann von der Größe her variieren. Aber der Standard legt fest das sizeof die Größe eines Datentyps in Byte zurück gibt, also liefert der Operator für (signed/unsigned) char immer genau 1. :) Was aber nicht heißt das ein char überall gleich viel Speicher verbraucht!

Anonymous

unregistriert

15

27.04.2009, 21:07

Ich frage mich ob es da nicht alignment probleme geben könnte, wenn man bit operations macht oder mit void-Zeigern arbeitet

VuuRWerK

Frischling

Beiträge: 59

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

16

27.04.2009, 21:09

Ok, das hast Du natürlich recht. Aber mal ehrlich das sind doch Kleinigkeiten die so oder so von einem Kompiler wegoptimiert werden, ne? ;)

Also her mit Deiner optimierten Version (darfst sogar sizeof(char) weglassen), auf die wart ich noch :P

Gut Schuß
VuuRWerK ;)
http://german-bash.org/212445
"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off." - Bjarne Stroustrup

17

27.04.2009, 22:32

Zitat von »"VuuRWerK"«

Ich weiß es nicht also nehm ich gleich sizeof, der Compiler optimierts weg wenns nicht nötig ist ;)
[...]
Aber mal ehrlich das sind doch Kleinigkeiten die so oder so von einem Kompiler wegoptimiert werden, ne?
Doch, du weisst es. Und da sizeof sowieso zur Compilezeit ausgewertet wird, ist es in diesem Zusammenhang nicht sehr sinnvoll, von "Wegoptimieren" zu sprechen. ;)

Und wieso eigentlich ein #define, wenn an dieser Stelle eine Funktion viel geeigneter wäre? Zudem ist nirgends garantiert, dass 'a' bis 'z' bzw. 'A' bis 'Z' schön hintereinander stehen, von daher wären Funktionen aus <ctype.h> sicherer.

Gotbread

Alter Hase

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

18

27.04.2009, 22:34

bitte sehr :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
inline char *clean_string(const char *str)
{
    const char *end = str;
    while (*end)
        ++end;

    char *result = malloc(end - str + 1);
    char *ptr = result;
    while (*str)
    {
        if ((*str <= 'Z' && *str >= 'A') || (*str <= 'z' && *str >= 'a'))
            *ptr++ = *str;
        ++str;
    }
    *ptr = 0;
    return result;
}
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

VuuRWerK

Frischling

Beiträge: 59

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

19

27.04.2009, 22:48

Zitat von »"Nexus"«

Doch, du weisst es. Und da sizeof sowieso zur Compilezeit ausgewertet wird, ist es in diesem Zusammenhang nicht sehr sinnvoll, von "Wegoptimieren" zu sprechen. ;)

Und wieso eigentlich ein #define, wenn an dieser Stelle eine Funktion viel geeigneter wäre? Zudem ist nirgends garantiert, dass 'a' bis 'z' bzw. 'A' bis 'Z' schön hintereinander stehen, von daher wären Funktionen aus <ctype.h> sicherer.


Das mit dem "Ich weiß es nicht" war eher so gemeint das ich erstmal davon ausging das es vllt. unterschiedliche Größen Umsetzungen für unterschiedliche Kompiler gibt. Aber das es natürlich gar nicht kleiner bzw. größer geht is natürlich klar. Zudem dient es der Lesbarkeit: ich allokiere Speicher mit einer Größe von _strlen(s) mal char.

Wegoptimieren ist an der Stelle vllt. nicht die passendste Bezeichnung aber jeder weiß was damit gemeint ist.

Wieso ist für den Test eine Funktion geeigneter? Den Test hätte ich wahrscheinlich sowieso gleich als Ausdruck ins if geschrieben und habe die #define variante wieder nur der lesbarkeithalber benutzt. Dennoch würde mich interessieren wieso eine Funktion besser gewesen wäre?

Beim Test mit 'a' usw. gehe ich wieder davon aus der Compiler es mit den jeweiligen dezimal-Werten aus der Ascii Tabelle ersetzt daher kann man das auch so schreiben. Ascii ist IMHO ein festgelegter Standard. Die Version aus ctype.h kenne ich natürlich, jedoch darf der Topicstarter ausser stdlib.h, stdio.h und ggf. string.h keine anderen Header verwenden.

Gut Schuß
VuuRWerK ;)
http://german-bash.org/212445
"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off." - Bjarne Stroustrup

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

20

28.04.2009, 18:54

Zitat von »"VuuRWerK"«

Ascii ist IMHO ein festgelegter Standard.


Ja stimmt, aber es wird nirgends vorgeschrieben das auch ASCII verwendet werden muss.

Werbeanzeige