Don’t:
short, int, long verwenden, wenn nicht nötig
int main()
Do:
Datentypen aus inttypes.h verwenden
int8_t, uint8_t, int16_t, …printfDon’t:
printf(message)
uint8_t x = 10; printf("%d", x)
Do:
printf("%s", message)
uint8_t x = 10; printf("%"PRIu8, x)
Don’t:
Do:
Rückgabewerte von Funktionen überprüfen
char *p = malloc(10);
if (p == NULL) {
perror("Kein Speicher mehr!");
exit(EXIT_FAILURE);
}Manpage lesen um Fehler-Rückgabewerte herauszufinden
Don’t:
String-Funktionen ohne n verwenden, die keine Längen prüfen
strcpy -> strncpy, strcmp -> strncmp, …
Do:
Arrays nur von 0 bis laenge-1 indizieren
Das zusätzlich benötigte Null-Byte bei Strings beachten
Welche Funktion muss immer existieren, damit ein Programm ausgeführt werden kann? Gib die vollständige Signatur an (für Parameterübergabe).
int main(int argc, uint8_t *argv[]) ⇐ Falsch!
int main(int argc, char **argv)
Die Variable uint64_t zahl wird im Programm verwendet. Was kann bei folgendem Ausdruck schiefgehen?
printf("%d\n", zahl)
Wie ist es korrekt?
%d ist für Datentyp int gedacht. uint64_t kann deutlich größer werden. Weiterhin wurde das Semikolon vergessen!
printf("%"PRIu64"\n", zahl);
Was ist die Ausgabe von folgendem Programmauszug?
uint8_t i = 20;
for (uint8_t i = 0; i<3; i++) {
uint8_t i = 5;
printf("%"PRIu8"\n", i);
}
printf("%"PRIu8"\n", i);5
5
5
20Was ist die Ausgabe von folgendem Programmauszug?
char *buffer = "Hallo";
char term = 'Z';
char *pTerm = &term;
buffer = pTerm;
printf("%s\n", buffer);z.B.
Z?°¾Íÿ
ZÏ@÷wü
ZÃý