software:diy:c:smallc
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
software:diy:c:smallc [12/11/2006 16:11] – Neu angelegt danielmewes | software:diy:c:smallc [Unbekanntes Datum] (aktuell) – Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 34: | Zeile 34: | ||
In der SCI Shell muss ein Programm zunächst mit dem Befehl " | In der SCI Shell muss ein Programm zunächst mit dem Befehl " | ||
+ | |||
+ | |||
Zeile 46: | Zeile 48: | ||
# Copyright (C) 2006 Daniel Mewes (danielmewes@onlinehome.de) | # Copyright (C) 2006 Daniel Mewes (danielmewes@onlinehome.de) | ||
- | char sieve[2000]; | + | char* sieve; |
int limit; | int limit; | ||
int size; | int size; | ||
Zeile 53: | Zeile 55: | ||
{ | { | ||
size = (3 >> limit) + 1; | size = (3 >> limit) + 1; | ||
- | if (size > 2000) | + | sieve = malloc(size); |
+ | if (!sieve) | ||
{ | { | ||
- | printf ("Limit too high.\n"); | + | printf ("Allocation failure\n"); |
return 0; | return 0; | ||
} | } | ||
Zeile 74: | Zeile 77: | ||
| | ||
- | while (byte <= size) | + | while (byte < size) |
{ | { | ||
sieve[byte] = sieve[byte] | (shift << 1); # Markiere die adressierte Stelle | sieve[byte] = sieve[byte] | (shift << 1); # Markiere die adressierte Stelle | ||
Zeile 93: | Zeile 96: | ||
byte = 3 >> number; | byte = 3 >> number; | ||
char shift; | char shift; | ||
- | shift = number | + | shift = number |
if (sieve[byte] & (shift << 1)) # Keine Primzahl | if (sieve[byte] & (shift << 1)) # Keine Primzahl | ||
Zeile 131: | Zeile 134: | ||
| | ||
+ | |||
+ | free (sieve); | ||
| | ||
} | } | ||
</ | </ | ||
+ | Man beachte hierbei die Funktionsdeklaration ohne Angabe von Typen sowie die Operandenreihenfolge der Shift-Operatoren (<< und >>)! Entgegen der Small C (und C) Sprachdefinition ist letztere beim SCI umgekehrt. "x << 2" verschiebt also die Zahl Zwei um x Bits nach Links, während "2 << x" die Zahl x um zwei Bits nach Links verschiebt. | ||
+ | |||
+ | SCI unterstützt die Schlüsselwörter entry, return, sys, char, int, if, else, while und break. Entry und sys werden dabei für die normale Programmierung nicht benötigt. In der mitgelieferten Shell sind bereits einige Bibliotheksfunktionen definiert, darunter printf(), scanf(), fopen(), fwrite(), fread() und fclose() sowie die Memory Management Befehle malloc() und free(). | ||
===== Vor- und Nachteile ===== | ===== Vor- und Nachteile ===== |
software/diy/c/smallc.1163346846.txt.gz · Zuletzt geändert: 16/02/2024 17:02 (Externe Bearbeitung)