Krautkanal.com

Veröffentlicht am 2015-06-05 03:30:57 in /prog/

/prog/ 7186: Gutes C(89)

kuldarkalvik Avatar
kuldarkalvik:#7186

Hallo, /prog/!

Gibt es ein Programmierprojekt, von dem du dich inspirieren lässt?

Bernd schaut z. B. auf https://github.com/tmux/tmux (bzw. in die lokale Kopie), weil er gerne sauberen und reinen C-Kot hätte und ein aluhütiger Kanadier diesen als hochqualifiziert bezeichnet hatte.

trickyolddog Avatar
trickyolddog:#7193

>>7186
Hier. https://github.com/munificent/wren
Bernd sei gewarnt, dies ist C99, welches naturbedingt gnu99 (für computed gotos) includiert, falls der compiler es beherrscht.

emilioiantorno Avatar
emilioiantorno:#7204

Alle.jpg Projekte von suckless.org.

carlyson Avatar
carlyson:#7207

>>7204
Nein.

Eben mal in so ein Projekt geschaut.

Keinerlei Kommentare, was nicht weiter schlimm wäre, wenn die Namen einigermaßen Aussagekraft hätten.

Leider waren sie unnötig kryptisch.

chris_frees Avatar
chris_frees:#7208

Quelltext hätte bei mir etwa solche Form. Halte mich aber auch nicht für einen guten Programmierer:


#include <wichtig>
#include <unwichtig>
#include "lokal.h"

#define AUSGANGSTEMPERATUR_IN_K 32
#define FEHLERMELDUNG "Fehler"

const int arschlecken = 1;
static int barschlecken = 2;

/* Prototypen */
int main(int, char **);
int fn1(int, long int);
int fn2(char *);

/* Definitionen */
main(argc, argv)
{
        int ret1, ret2;

        ret1 = fn1(30, 256464);
        ret2 = fn2("Unsinn");
        return 0;
}

fn1(temperatur, schritte)
{
        /* ... */
}

fn2(eingabezk)
{
        /* ... */
}


Dabei können alle Teile, bis auf die Definitionen in die .h-Datei ausgelagert werden, wenn sie exportierbar sein sollen.

jamesmbickerton Avatar
jamesmbickerton:#7223

>>7208
>#include <wichtig>
>#include <unwichtig>

Fast, bei C schreibt man noch .h dahinter.

linux29 Avatar
linux29:#7228

Alles vom ihm.

ankitind Avatar
ankitind:#7233

Schau mal bei den Lua-Leuten vorbei, dass soll relativ sauberer C-kot sein.

kamal_chaneman Avatar
kamal_chaneman:#7234

>>7233
Jein.
Einerseits gibt es auch dort unnötig kryptische Variablennamen.

Andererseits scheint der Code gut kommentiert zu sein.

m_kalibry Avatar
m_kalibry:#7245

Bernd benutzt deutsche Variablen-/Veränderlichennamen und mitunter unbedingte Sprunganweisungen (goto); beides von seinen Informatikerkollegen stark beargwöhnt.

Auch: $ grep goto tmux-master/* | wc -l
175


Kann ja dann nicht so verkehrt sein.

sokaniwaal Avatar
sokaniwaal:#7246

>>7245
Greppe doch mal den Kernel nach gotos durch!

marshallchen_ Avatar
marshallchen_:#7251

>>7246

find linux-3.18 -name '*.[hc]' | xargs grep goto | wc -l
119951

Ist das jetzt gut oder schlecht?

soyeljuaco Avatar
soyeljuaco:#7256

>>7251
>Ist das jetzt gut oder schlecht?

gotos (vor allem) in C zu benutzen ist halt nicht umbedingt immer schlecht, es komm halt drauf an.

carlyson Avatar
carlyson:#7262

> gotos (vor allem) in C zu benutzen ist halt nicht umbedingt immer schlecht, es komm halt drauf an.

Korrekt im Allgemeinen gilt die Faustregel:
Vorwärts springen ist okay, rückwärts springe niemals.
(Vorwärts immer, rückwärts nimmer.)

javorszky Avatar
javorszky:#7263

>>7186
tmux ist von den OpenBSD Leuten, die sind auch dafür extreme Altschul C Nazis zu sein
und sauberen Code zu schreiben.

Wenn dir das gefällt könnte dir auch der Code von OpenSMTPd oder OpenBGPD gefallen.