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

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

41

22.10.2008, 21:48

Hmm, also 16.000 klingt mir schon ein bisschen viel.
Du hast recht, die Menge sollte begrenzt werden.
Die Begrenzungen sollten solche "Suchaktionen" ja gerade verhindern.
Aber auf welchen Wert?
Am besten gerade so viel, dass dein Ansatz nicht klappt :D
Sagen wir mal 8 KB ...

Gotbread

Alter Hase

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

42

22.10.2008, 22:16

8kb? so viel? 1kb reicht völlig mein datenstring ist unter 200 zeichen

gibts schon ergebnisse?

tokenzahl < 500
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

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

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

43

23.10.2008, 11:06

Ich gehe mit. Soll heißen: ich kann alle bisher hier genannten Tokenzahlen unterbieten 8)

Mein Daten-String ist 5580 Zeichen lang. Dazu eine Frage: eine String-Konstante zählt doch als ein Token ? Darf eine solche Konstante der Übersichtlichkeit halber auf mehrer Zeilen verteilt werden, oder muss ich vor Abgabe alles zu einem String zusammenpacken ?

C-/C++-Quelltext

1
2
3
4
char s[] = "erste Zeile\0"
           "zweite Zeile\0";
// oder

char t[] = "erste Zeile\0zweite Zeile\0";

Der tokencounter zählt sowas (und möglicher Weise noch so einiges anderes) leider extra.

Und noch eine Frage: ist es erlaubt, Konstrukte zu verwenden, die ein Warning erzeugen ?

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

44

23.10.2008, 11:19

Zitat von »"S.Seegel"«

Mein Daten-String ist 5580 Zeichen lang.

Ich hoffe, das bringt dich nicht über die 8 KB.

Zitat von »"S.Seegel"«

Dazu eine Frage: eine String-Konstante zählt doch als ein Token ? Darf eine solche Konstante der Übersichtlichkeit halber auf mehrer Zeilen verteilt werden, oder muss ich vor Abgabe alles zu einem String zusammenpacken ?

Vor der Abgabe zusammenpacken, bitte.

Zitat von »"S.Seegel"«

Der tokencounter zählt sowas (und möglicher Weise noch so einiges anderes) leider extra.

Was denn noch? Falls du dich auf das L vor einem wchar_t-String beziehst, das ist mittlerweile korrigiert.

Zitat von »"S.Seegel"«

Und noch eine Frage: ist es erlaubt, Konstrukte zu verwenden, die ein Warning erzeugen ?

Ja, tu ich auch.

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

45

23.10.2008, 12:00

Die 8k-Grenze ist kein Problem. Ich spreche von ASCII-Zeichen, also pro Zeichen ein Byte plus abschließendes Null-Byte, macht 5581 Bytes. Grob geschätzt die Hälfte davon sind ohnehin Füllzeichen, um die interessanten Abschnitte auszurichten. Ohne die 8k-Grenze könnte ich im Übrigen noch sechs Token einsparen.

Was der Tokencounter genau zählt kann ich nur raten. Ich vermute mal, die Ausgabe sollen die einzelnen Token sein. Dann zählt er z.B. die umschließenden Anführungszeichen um eine String-Konstante separat, ebenso in der Konstante auftauchende Escape-Sequenzen wie \0 oder \xXX.
Manchmal bekomme ich auch mehrere Zeilen, so wie sie im Quelltext stehen, unverändert ausgegeben. Dann wiederum beginnt er mitten in einer auskommentierten Quelltextzeile zu zählen:

Quellcode

1
2
3
4
5
6
7
        //sprintf(p_text_out, "
%
i
, 
n
)
;
(Hatte testweise das Parse-Ergebnis als Antwort zurückgegeben. Ja, ich weiß, dass die Standartbibliothek nicht erlaubt ist !)

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

46

23.10.2008, 12:10

Seltsam, diese Probleme habe ich nicht.
Kannst du mir mal ein möglichst kleines Stück Code zeigen, wo der Fehler auftritt?

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

47

23.10.2008, 13:00

Einen kleinen Hinweis sollte ich noch vorweg schicken: da ich unter Linux arbeite, führe ich die tokencounter.exe mittels wine aus. Die Gegenprobe unter Windows hat das Problem aber bestätigt.

Nach einigem Probieren hab ich den Auslöser lokalisieren können:

C-/C++-Quelltext

1
char data[] = "\x49\x00\x56\x80\x58\x00\x4c\x80\x43\x00\x44\x80\x4d\x00";

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
char 
data
[
] 
=   
x49
x00
x56
x80
x58
x00
x4c
x00
x43
x00
x44
x00
x4d
x00
;
        
        

--------------------

Token: 20

Der Tokencounter scheint sich an Hex-Escape-Sequenzen zu verschlucken, wenn diese das höchstwertigste Bit gesetzt haben. Wenn ich die '\x80' durch '\x00' ersetze, verschwindet das Problem:

C-/C++-Quelltext

1
char data[] = "\x49\x00\x56\x00\x58\x00\x4c\x00\x43\x00\x44\x00\x4d\x00";

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
char 
data
[
] 
=   
"\x49\x00\x56\x00\x58\x00\x4c\x00\x43\x00\x44\x00\x4d\x00"
;
        
        

--------------------

Token: 7

Alles weitere scheinen Folgefehler zu sein. Ab der ersten Konstante, die eine solche Escape-Sequenz beinhaltet, bringt der Tokencounter string-Konstanten-Inhalt und Quelltext durcheinander.

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

48

23.10.2008, 13:17

Danke für die Hilfe.
Es lag daran, dass \x80 für ein signed char zu viel ist. Jetzt habe ich char per Default auf unsigned gesetzt, und nun geht's. Paket wurde aktualisiert.

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

49

23.10.2008, 13:35

Super, ich hatte mich sogar zu meinen Ungunsten verzählt *freu*

PS: die Datei, die meinen kompletten namespace beinhaltet, ist kleiner als 8k.

50

23.10.2008, 15:27

Ich hab meine Tokenzahl fast halbiert und das bei deutlich unter 8k :D

edit: was genau sollen jetzt diese 8k eingentlich sein?
Code-Größe oder String-Größe?

edit2: Meine Token teilen sich übrigens genau 50-50 auf römisch->binär und binär->ausgabe auf.

Werbeanzeige