Forum: PC-Programmierung Maximale Quellcodedateigröße?


von Erwin M. (nobodyy)


Lesenswert?

Bei einigen .c-Dateien in einem Projekt zeigte sich eine Dateigröße von 
mehreren MB und mehrere zehntausend Zeilen Länge.
Welche maximale Größe sollten Quellcodedatei haben, bezüglich Dateigröße 
und Zeilenanzahl?

von Programmiersprachentheaterintendant (Gast)


Lesenswert?

Handgeschriebener oder Maschinengenerierter .c-Quellcode?

von Bri (bri)


Lesenswert?

Also für handgeschriebenen Code ist das eindeutig zu viel. Eine feste 
Vorgabe wie z.B. max 500 Zeilen sind erlaubt ist nicht sinnvoll. Aber 
man sollte Aufgaben schon in kleine sinnvolle Teile zerlegen und 
entsprechend in Dateien unterteilen.

von Sempfdazugeber (Gast)


Lesenswert?

> schon in kleine sinnvolle Teile zerlegen

Es spricht auch nichts dagegen, dass nicht zu tun.

von Alex G. (dragongamer)


Lesenswert?

Sempfdazugeber schrieb:
>> schon in kleine sinnvolle Teile zerlegen
>
> Es spricht auch nichts dagegen, dass nicht zu tun.
Naja, die Übersichtlichkeit die darunter leidet, spricht schon 
dagegen...

EDIT: Willst du nur deinem Namen gerecht werden? ;)

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Erwin M. schrieb:
> Welche maximale Größe sollten Quellcodedatei haben, bezüglich Dateigröße
> und Zeilenanzahl?

Eine mögliche Größe geben Tools wie Eclipse vor, die bei großen Files 
die Komfortfunktionen einschränken.

Bei meinem Eclipse hier ist der Indexer auf .c Files <8MB eingeschränkt, 
und ab 50.000 Zeilen wird auf "Scalability mode" geschaltet.

von Filesystem (Gast)


Lesenswert?

Erwin M. schrieb:
> Bei einigen .c-Dateien in einem Projekt zeigte sich eine
> Dateigröße von
> mehreren MB und mehrere zehntausend Zeilen Länge.
> Welche maximale Größe sollten Quellcodedatei haben, bezüglich Dateigröße
> und Zeilenanzahl?

Es gilt das Limit des jeweiligen Filesystems.

von A. S. (Gast)


Lesenswert?

Es hängt vom Codeumfang ab. Auch Zeilen je File sind in etwa 
pareto-verteilt. Bei 1 Mio Codezeilen ist es okay, wenn 2-3 zwischen 20- 
und 50.000 Zeilen liegen.

Wenn diese Files wirklich thematisch in sich geschlossen sind, lohnt 
sich oft, hier über automatisierten Code nachzudenken. Ein einfaches 
Auseinanderreißen hingegen ist Quatsch. Du liest Files ja nicht wie ein 
Buch, sondern navigierst mit der IDE. Und sobald beim zerreißen neue 
Header notwendig werden oder Fragmente kopiert werden: Vorsicht.

von Programmiersprachentheaterintendant (Gast)


Lesenswert?

Erwin M. schrieb:
> Bei einigen .c-Dateien in einem Projekt zeigte sich eine Dateigröße von
> mehreren MB und mehrere zehntausend Zeilen Länge.

Achim S. schrieb:
> Es hängt vom Codeumfag ab.

LOCs, Kommentar & eingebettete Doku oder ins Programm eingebettete 
Daten?

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Neben den offensichtlichen Grenzen (Dateisystemgröße, maximale 
Dateigröße, Lesbarkeit) gibt es auch compilerinterne Beschränkungen, die 
teilweise bekannt und teilweise nicht bekannt sind. Ich bin bei 
(älteren) Compilern (ARM bzw. Norcroft ADS) schon zweimal an solch eine 
Grenze gestoßen, allerdings nicht mit handgeschriebenem, sondern 
werkzeuggeneriertem Quellcode:

1. Der C-Compiler mochte keine switches mit mehr als 512 Cases.

2. Bei der Übersetzung einer ca. 20MB großen Quellcodedatei gab es 
keinerlei Probleme im ARM-Modus. Im Thumb-Modus sah es aber so aus, als 
würde sich der Compiler aufhängen und nur noch CPU-Zeit konsumieren. Als 
der Hersteller dieses Problem untersuchte, stellte er fest, dass der 
Compiler gar nicht hing, sondern ein Optimierungsalgorithmus sehr 
schlecht skalierte und somit der Compiler wohl nach nur wenigen Wochen 
damit fertig gewesen wäre. Dieses Problem konnte der Hersteller aber 
sehr schnell beheben.

von georg (Gast)


Lesenswert?

Dass sich für eine Sourcedatei mit "mehreren zehntausend Zeilen" keine 
sinnvolle Einteilung nach Funktion finden lässt, ist schwer zu glauben - 
das müsste schon ein absoluter Meister des Spaghetti-Codes verbrochen 
haben, der noch nie etwas von strukturierter Programmierung gehört hat.

Nicht die Länge an sich gehört verboten, sondern der chaotische Aufbau, 
der zu der Länge geführt hat. Es ist schon eine Weile her, dass 
Unterprogramme erfunden wurden, und so mancher ist sogar auf die Idee 
gekommen, dass man so etwas wiederverwenden könnte.

Georg

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

georg schrieb:
> Nicht die Länge an sich gehört verboten, sondern der chaotische Aufbau,
> der zu der Länge geführt hat.

Bei automatisch generiertem Code handelt es sich nicht zwangsweise um 
einen chaotischen Aufbau, sondern meist um sehr gut strukturierten Code. 
Mögliche Anwendungsfälle sind z.B. Zustandsautomaten, die in komplett 
ausgerolltem Zustand eben sehr groß werden können, siehe z.B. die oben 
erwähnte 512-Case-Beschränkung.

Ebenso kann man im C-Quellcode auch z.B. Fremdcode als char-Array 
unterbringen, z.B. Fonts, Grafiken, Dateisystemabbilder, usw.. Um diesen 
Fremdcode nicht mit eigenem handgeschriebenen Code zu vermischen, kann 
es sinnvoll sein, eine Art Containerdatei dafür anzulegen. Um die 
globale Sichtbarkeit der dabei erzeugten Symbole zu begrenzen, kann es 
sinnvoll sein, als einziges nichtlokales Symbol eine Tabelle mit den 
Inhalten dort unterzubringen. Eine derartige Vorgehensweise ist z.B. 
gebräuchlich bei kleinen Embedded-Webservern, deren statische Inhalte 
auf diese Art und Weise abgelegt werden.

Natürlich kann man manche dieser Anwendungsfälle auch durch extern 
gelinkte Binärdateien umsetzen, aber ggf. muss man sich dann in die 
Tiefen der Linkerskripte und der Umsetzung von Symbolnamen begeben, was 
aber die Portabilität nicht unbedingt verbessert.

von imonbln (Gast)


Lesenswert?

Erwin M. schrieb:
> einem Projekt zeigte sich eine Dateigröße von
> mehreren MB und mehrere zehntausend Zeilen Länge

Das sollte der Software Architekt mal dringend über eine Refactoring 
nachdenken, Mir kann keiner Erzählen das er erstens bei so großen 
Dateien noch den überblickt hat und das es da nichts gibt das sich als 
Thematisch auslagern lasst um da vielleicht eine Libary draus zu machen.

IHMO ist eine feste grenze wie max 1000 Zeilen sinnlos. Als weiche 
grenze kann man sagen alles was ausgedruckt 5 Blatt Din A4 übersteigt, 
braucht ein Moment bis jemand frisches Das durchsteigen kann.
Und ja mir ist bewusst das mit modernen IDE der Wunsch Code zu drucken 
um Ihn zu verstehen stark nachgelassen hat. Aber wie gesagt eine weiche 
Regel wie viel Code pro Datei finde ich dennoch sinnvoll.

Bei Projekten welche mehrere zehntausend Zeilen pro Dateien haben, ist 
die Wahrscheinlichkeit groß das es sich um Historisch gewachsene 
Strukturen handelt.  Ich persönlich habe die Erfahrung gemacht, das 
solche Walls of Text besonders Anfällig sind für, Toten Code, Code 
Dopplung und alle möglichen damit zusammenhängende Probleme.

von MaWin (Gast)


Lesenswert?

Erwin M. schrieb:
> Bei einigen .c-Dateien in einem Projekt zeigte sich eine
> Dateigröße von mehreren MB und mehrere zehntausend Zeilen Länge.
> Welche maximale Größe sollten Quellcodedatei haben, bezüglich Dateigröße
> und Zeilenanzahl?

Es gibt Compiler, die grosse Dateien nicht mehr schaffen, oft weil der 
Speicher bei der Codeoptimierung ausgeht.
Dann muss man die Datei halt kleiner machen.
Auch brauchen manche Compiler oder Editore länger, manche Diff-Programme 
können so grosses nicht.
Ansonsten gibt es keinen wirklichen fachlichen Grund, die Übersicht 
einer grossen Datei durch den unübersichtlichen Verhau vieler kleiner 
Dateien zu ersetzen.

von Marc (Gast)


Lesenswert?

Die Wahrheit ist wie immer fließend ...

Ich bin allerdings kein Freund von switches mit hunderten von case 
fällen.
Je optimierungsverhalten des compilers kommt da sehr unperformanter Code 
raus. Da sollte man immer ein Auge drauf haben.

von Bernd K. (prof7bit)


Lesenswert?

MaWin schrieb:
> die Übersicht
> einer grossen Datei durch den unübersichtlichen Verhau vieler kleiner
> Dateien zu ersetzen.

Da hast Du recht, das will man sicher nicht.

Aber man könnte sie stattdessen durch eine übersichtliche und 
wohlgeordnete Anzahl vieler kleiner Dateien ersetzen.

: Bearbeitet durch User
von Ivo -. (Gast)


Lesenswert?

Meine Grenze liegt bei 500 Zeilen, aber das ist für mich auch keine 
harte Grenze sondern eher ein Richtwert.
Ohne Codefolding würds aber auch nicht gehen.

Ivo

von A. S. (Gast)


Lesenswert?

Bernd K. schrieb:
> Aber man könnte sie stattdessen durch eine übersichtliche und
> wohlgeordnete Anzahl vieler kleiner Dateien ersetzen

Wenn das möglich ist, sollte man es tun. Wobei "übersichtlich" und 
"viel" halt im Auge des Betrachters liegt.

Es ist wie so oft im Leben: Eine Datei von 100.000 Zeilen ist vermutlich 
ein Müllhaufen und hat vermutlich  (wie jedes SW) 
Verbesserungspotential. Das ändert aber nichts daran, dass es 
Quelldateien dieser Größe gibt, bei denen aufteilen die Komplexität 
nicht mindert und die Überschaubarkeit (per IDE) nicht erhöht. Dann 
sollte man es auch lassen.

Und das Argument unzureichender Compiler oder IDEs: Ja, dann muss man 
wohl oder übel Abstriche beim Code machen.

von A. S. (Gast)


Lesenswert?

Ivo Z. schrieb:
> Meine Grenze liegt bei 500 Zeilen

Bei Treibern sicher ok, also bei einer Ansammlung von vielen, einander 
unabhängigen Funktionalitäten. Dann sind 2000 Dateien je 500 Zeilen OK, 
mit je einer öffentlichen Header.

Bei einem autarken embedded Projekt mit gleicher Codezeilen-Zahl, ist 
oft schon die sinnvolle Benamung der Dateien ein Problem. Und wenn dann 
thematische Zusammenhänge auf 10-20 solcher Mini-Dateien verteilt werden 
und zusätzliche Header notwendig sind, dann wird die eigentliche 
Problematik sichtbar.

von avr (Gast)


Lesenswert?

Marc schrieb:
> Je optimierungsverhalten des compilers kommt da sehr unperformanter Code
> raus.

Das läuft meist auf eine Look-Up-Table heraus, wenn der Compiler nicht 
ganz schlecht ist. Unda dazu würde ich sogar sagen, dass dann meist sehr 
guter Code erzeugt wird.

von Rolf M. (rmagnus)


Lesenswert?

imonbln schrieb:
> Bei Projekten welche mehrere zehntausend Zeilen pro Dateien haben, ist
> die Wahrscheinlichkeit groß das es sich um Historisch gewachsene
> Strukturen handelt.

Sehe ich auch so. Meist ist das über viele Jahre so geworden, und 
zwischendurch hat sich nie einer Gedanken darüber gemacht, die Struktur 
an die Veränderungen anzupassen. Dementsprechend unübersichtlich ist 
sowas dann.

MaWin schrieb:
> Ansonsten gibt es keinen wirklichen fachlichen Grund, die Übersicht
> einer grossen Datei

Alles in eine so große Datei zu stopfen, finde ich nicht besonders 
übersichtlich.

> durch den unübersichtlichen Verhau vieler kleiner Dateien zu ersetzen.

Die Idee ist ja auch, es nicht unübersichtlich zu machen.

von Walter K. (walter_k488)


Lesenswert?

Maximale Größe einer Sourcecodedatei?
Unter ZFS sind es exakt:
1,844674407371e19 Byte

von Bernd K. (prof7bit)


Lesenswert?

Walter K. schrieb:
> Maximale Größe einer Sourcecodedatei?
> Unter ZFS sind es exakt:
> 1,844674407371e19 Byte

Na dann fang lieber schonmal an zu schreiben. Das wird diese Woche nicht 
mehr fertig.

von Rolf M. (rmagnus)


Lesenswert?

Walter K. schrieb:
> Maximale Größe einer Sourcecodedatei?
> Unter ZFS sind es exakt:
> 1,844674407371e19 Byte

Aha. Hast du denn auch einen Texteditor, mit dem du eine so große Datei 
bearbeiten kannst? Und wieviel RAM braucht dein Compiler typischerweise 
zum Übersetzen so einer Datei?

von Erwin M. (nobodyy)


Lesenswert?

Achim S. schrieb:
> Wenn diese Files wirklich thematisch in sich geschlossen sind, lohnt
> sich oft, hier über automatisierten Code nachzudenken.

Dann könnte man auch den Linux-Kernel in eine .c-Datei, weil es ja nur 
den Linux-Kernel betrifft und damit thematisch in sich geschlossen ist. 
Das wären ja nur wenig mehr als 20 Mio Zeilen.

von Ivo -. (Gast)


Lesenswert?

Achim S. schrieb:
> Ivo Z. schrieb:
>> Meine Grenze liegt bei 500 Zeilen
>
> Bei Treibern sicher ok, also bei einer Ansammlung von vielen, einander
> unabhängigen Funktionalitäten. Dann sind 2000 Dateien je 500 Zeilen OK,
> mit je einer öffentlichen Header.
>
> Bei einem autarken embedded Projekt mit gleicher Codezeilen-Zahl, ist
> oft schon die sinnvolle Benamung der Dateien ein Problem. Und wenn dann
> thematische Zusammenhänge auf 10-20 solcher Mini-Dateien verteilt werden
> und zusätzliche Header notwendig sind, dann wird die eigentliche
> Problematik sichtbar.

Ich hab bisher nur alleine Hobbyprojekte gemacht, über 1000 Zeilen war 
ich nie nennenswert drüber, von daher habe ich mich mit solchen 
Dimensionen noch nicht beschäftigt.

Ivo

von Zeno (Gast)


Lesenswert?

MaWin schrieb:
> Ansonsten gibt es keinen wirklichen fachlichen Grund, die Übersicht
> einer grossen Datei durch den unübersichtlichen Verhau vieler kleiner
> Dateien zu ersetzen.

Bei C# scheint dies aber bei vielen Programmierern genau der Trend zu 
sein. Ich arbeite zeitweise an einem größeren WPF-Projekt mit und der 
Kollege mit dem ich da zusammenarbeiten muß ist auch ein Verfechter 
vieler kleiner Dateien. Da gibt es dann Sourcefiles wo nur eine Methode 
drin steht die nichts weiter macht, als auf eine andere Methode zu 
verweisen, welche ihrerseits auf die nächste Methode verweist. Der Code 
liest sich komplett beschissen und man kann sich dann nur sehr schwer in 
seine Logik einarbeiten. Er, der Kollege, findet das aber toll und ist 
der Meinung das sei guter Programmierstil und ist von dieser 
Arbeitsweise nicht abzubringen.

Ich persönlich halte es so, daß ich das was logisch zu einer bestimmten 
Funktionalität gehört in eine Datei schreibe.

von spagetticode (Gast)


Lesenswert?

Erwin M. schrieb:
> Welche maximale Größe sollten Quellcodedatei haben, bezüglich Dateigröße
> und Zeilenanzahl?

Das kommt darauf an welchen Editor du verwendest, Der Windows Notepad 
macht schon bei wenigen MB schlapp. Richtige Editoren wie z.B. emacs 
können gigabyteweise auf die Festplatte swappen wenn es nötig ist.

von Rudolf S. (Firma: Ingenieurbüro ItD) (rudolfatitd)


Lesenswert?

Ich suche immer mal wieder Antworten auf Fragen in den seriösen Foren. 
Heute auch wieder - ich hatte dieselbe Frage wie am Anfang: Maximale 
Größe Quelldatei".

Hut ab vor soviel Text mit NULL hilfreicher Information. Das hätte ich 
nur bei Facebook erwartet.

von c-hater (Gast)


Lesenswert?

Rudolf S. schrieb:

> Ich suche immer mal wieder Antworten auf Fragen in den seriösen Foren.
> Heute auch wieder - ich hatte dieselbe Frage wie am Anfang: Maximale
> Größe Quelldatei".
>
> Hut ab vor soviel Text mit NULL hilfreicher Information. Das hätte ich
> nur bei Facebook erwartet.

Wenn du einfache Antworten auf schwer entscheidbare Fragen suchst: 
schließ' dich irgendeiner Religion oder meinetwegen auch der AfD an. All 
diese Organisationen  sind darauf spezialisiert, denjenigen, die arm im 
Geiste sind, genau so was zu liefern...

Alle anderen machen sich die Mühe, selber zu denken. Was unmittelbar 
dazu führt, das man so'n Schwachsinn erst garnicht fragt, weil man, 
schon mit minimaler Eigenintelligenz ausgestattet, vollkommen mühelos 
selber erkennen kann: "it depends..."

von Rolf M. (rmagnus)


Lesenswert?

Rudolf S. schrieb:
> Hut ab vor soviel Text mit NULL hilfreicher Information. Das hätte ich
> nur bei Facebook erwartet.

Das wird daran liegen, dass schon die Frage nicht sonderlich sinnvoll 
ist. Wenn du eine Quellcode-Datei öffnen willst, die so groß ist, dass 
sie ein normaler Editor nicht handhaben kann, machst du was falsch.

von Thomas W. (thomas_v2)


Lesenswert?

Im Wireshark-Quellcode gibt es einige C-Quelldateien mit mehreren 10.000 
Zeilen. Die ganz großen mit 50-200k Zeilen sind jedoch automatisch aus 
einer ASN.1 Beschreibung generiert.
Ich finde mit 10.000 Zeilen in einer Datei lässt sich noch relativ gut 
arbeiten, wenn die Funktionensnamen sinnvoll vergeben sind, damit sich 
in einem Navigationsbaum des Editors diese schnell lokalisieren lassen.

Wobei das bei Wireshark auch etwas speziell ist, weil jedes Protokoll 
üblicherweise aus nur 1-2 Quelldateien besteht, und es trotzdem knapp 
2000 Dateien gibt. Wenn man da anfangen würde die Quelldateien noch 
weiter zu unterteilen, würde es vermutlich unübersichtlicher.

von Rolf M. (rmagnus)


Lesenswert?

Thomas W. schrieb:
> Im Wireshark-Quellcode gibt es einige C-Quelldateien mit mehreren 10.000
> Zeilen. Die ganz großen mit 50-200k Zeilen sind jedoch automatisch aus
> einer ASN.1 Beschreibung generiert.

Aber die wird man dann in der Regel nicht von Hand bearbeiten müssen.

von nur ungern C Programmierer (Gast)


Lesenswert?

Da C Compiler grottig langsam sind und auch die Fehler oft nicht die 
"echte" Stelle zeigen, sind lange Quelltexte Selbstgeißelung.

Wer sich einen Gefallen tun will, macht viele kleine Quelltextdateien. 
Es braucht dann nur das durch den Übersetzer, was auch geändert wurde.

von A. S. (Gast)


Lesenswert?

nur ungern C Programmierer schrieb:
> Da C Compiler grottig langsam sind und auch die Fehler oft nicht die
> "echte" Stelle zeigen, sind lange Quelltexte Selbstgeißelung.

Naja, meist trifft halt der erste Fehler.

> Wer sich einen Gefallen tun will, macht viele kleine Quelltextdateien.
+ entsprechenden Overhead, sprich Header-Dateien

> Es braucht dann nur das durch den Übersetzer, was auch geändert wurde.
naja, einzelne Dateien von 100kLOC brauchen jetzt ja nicht länger als ne 
Sekunde oder so. Und Änderungen in Headern können deutlich teurer sein.

von Yalu X. (yalu) (Moderator)


Lesenswert?

nur ungern C Programmierer schrieb:
> Da C Compiler grottig langsam sind

Ca. 14000 Zeilen/s (clang -O2) bzw. 12500 Zeilen/s (gcc -O2) (mit -O3
kaum langsamer) für ein reales Beispiel (epan/proto.c aus Wireshark) auf
einem mäßig schnellen Laptop würde ich jetzt nicht als "grottig langsam"
bezeichnen. Welchen Compiler, der so grottig langsam ist, benutzt denn
du?

> und auch die Fehler oft nicht die "echte" Stelle zeigen, sind lange
> Quelltexte Selbstgeißelung.

Zum einen lernt man  mit der Zeit, die Fehlermeldungen richtig zu
interpretieren, zum anderen haben die Meldungen (zuerst bei Clang, dann
denn auch bei GCC) in des letzten Jahren sehr viel an Aussagekraft
gewonnen. Vielleicht hast du von dieser ENtwicklung nur noch nichts
mitbekommen.

von S. R. (svenska)


Lesenswert?

nur ungern C Programmierer schrieb:
> Da C Compiler grottig langsam sind und auch die Fehler oft nicht die
> "echte" Stelle zeigen, sind lange Quelltexte Selbstgeißelung.

Du redest von C++-Compilern und kompliziertem, generischem Quellcode. 
Die meisten C-Compiler sind erstaunlich schnell (für die Qualität des 
erzeugten Codes).

von Klaus Banaus (Gast)


Lesenswert?

Programmiersprachentheaterintendant schrieb:
> Handgeschriebener oder Maschinengenerierter .c-Quellcode?

oder einfach nur präprozessor cpp output um die includes pfadsicher 
einzubinden.

https://linux.die.net/man/1/cpp

von nur ungern C Programmierer (Gast)


Lesenswert?

Yalu X. schrieb:
> Zum einen lernt man  mit der Zeit, die Fehlermeldungen richtig zu
> interpretieren

Na super! Auf der einen Seite geht es heute um KI und so ein popeliges 
Tool gibt Fehlermeldungen aus, deren Interpretation erlernt werden muss. 
:-<<<

Sorry, das Zeugs ist von gestern!

von S. R. (svenska)


Lesenswert?

nur ungern C Programmierer schrieb:
> Na super! Auf der einen Seite geht es heute um KI und
> so ein popeliges Tool gibt Fehlermeldungen aus,
> deren Interpretation erlernt werden muss.

Tja, auch KI muss auch lernen.
Lernt sie besser als du, bist wegen Doofheit raus.

Und wenn ein Tool wegen deiner eigenen Dummheit nicht funktioniert, dann 
ist deine eigene Dummheit schuld, nicht das Tool.

von Rolf M. (rmagnus)


Lesenswert?

nur ungern C Programmierer schrieb:
> Yalu X. schrieb:
>> Zum einen lernt man  mit der Zeit, die Fehlermeldungen richtig zu
>> interpretieren
>
> Na super! Auf der einen Seite geht es heute um KI und so ein popeliges
> Tool gibt Fehlermeldungen aus, deren Interpretation erlernt werden muss.
> :-<<<
>
> Sorry, das Zeugs ist von gestern!

Einerseits beschwerst du dich, dass die Compiler angeblich "grottig 
langsam" seien, andererseits willst du da eine KI drin haben, die dir 
die Warnungen erzeugt. Das passt nicht zusammen.

von nur ungern C Programmierer (Gast)


Lesenswert?

S. R. schrieb:
> Und wenn ein Tool wegen deiner eigenen Dummheit nicht funktioniert, dann
> ist deine eigene Dummheit schuld, nicht das Tool.

Wie immer: Reicht es fachlich nicht, wird man persönlich. Armer Tropf.


> Einerseits beschwerst du dich, dass die Compiler angeblich "grottig
> langsam" seien, andererseits willst du da eine KI drin haben, die dir
> die Warnungen erzeugt. Das passt nicht zusammen.
Wo schrieb ich, dass ich mir einen Compiler mit KI wünsche? Warum 
schreibst du solche falschen Behauptungen?

Der C Compiler soll nur- wie viele andere Compiler es machen - die echte 
Fehlerstelle benennen. Er soll nicht hoffen, dass noch alles gut wird 
und ein fehlendes ; 30 Zeilen tiefer mit ( erwartet melden. Das ist 
Steinzeit.

[Mod: Einer sachlichen Diskussion entgegenstehende Symbole gelöscht]

: Bearbeitet durch Moderator
von Johann J. (johannjohanson)


Lesenswert?

nur ungern C Programmierer schrieb:
> Auf der einen Seite geht es heute um KI

Wenn es an NI fehlt ist Hopfen und Malz verloren :-)

von ungern C Programmierer (Gast)


Lesenswert?

Johann J. schrieb:
> nur ungern C Programmierer schrieb:
>> Auf der einen Seite geht es heute um KI
>
> Wenn es an NI fehlt ist Hopfen und Malz verloren :-)

Nur Fachidioten hier? Es gibt auch ein Leben - mit und ohne KI - weit 
weg vom grottigen C Compiler.

von Johann J. (johannjohanson)


Lesenswert?

ungern C Programmierer schrieb:
>> Wenn es an NI fehlt ist Hopfen und Malz verloren :-)
>
> Nur Fachidioten hier? Es gibt auch ein Leben - mit und ohne KI - weit
> weg vom grottigen C Compiler.

Sag ich doch.

von Rolf M. (rmagnus)


Lesenswert?

nur ungern C Programmierer schrieb:
> Wo schrieb ich, dass ich mir einen Compiler mit KI wünsche?

Du hattest doch geschrieben, dass du dir bessere Compilerwarnungen 
wünschst, weil es heute KI gibt. Wenn du damit was anderes meintest, 
solltest du vielleicht mal erklären, wo du überhaupt den Zusammenhang 
zwischen Compilerwarnungen und KI siehst.

nur ungern C Programmierer schrieb:
> Der C Compiler soll nur- wie viele andere Compiler es machen - die echte
> Fehlerstelle benennen.

Was die echte Fehlerstelle ist, ist Ansichtssache. Solange der Code 
einen Sinn ergeben kann, ist für den Compiler ja erstmal nichts 
auffälliges dran. Erst wenn der Code keinen Sinn mehr ergibt, gibt er 
auf und bricht ab. Aus Sicht der Sprache ist das dann die echte 
Fehlerstelle.

von Yalu X. (yalu) (Moderator)


Lesenswert?

nur ungern C Programmierer schrieb:
> Yalu X. schrieb:
>> Zum einen lernt man  mit der Zeit, die Fehlermeldungen richtig zu
>> interpretieren
>
> Na super! Auf der einen Seite geht es heute um KI und so ein popeliges
> Tool gibt Fehlermeldungen aus, deren Interpretation erlernt werden muss.

Schön, dass auch du inzwischen eingesehen hast, dass C-Compiler nicht
grottig langsam sind.

Was die Fehlermeldungen betrifft: Kennst du eine Programmiersprache mit
einem Compiler, der immer den wahren Fehler anzeigt?

Wenn ja: Warum zeigt er ihn dann überhaupt an und korrigiert ihn nicht
gleich selbst?

nur ungern C Programmierer schrieb:
> Der C Compiler soll nur- wie viele andere Compiler es machen - die echte
> Fehlerstelle benennen. Er soll nicht hoffen, dass noch alles gut wird
> und ein fehlendes ; 30 Zeilen tiefer mit ( erwartet melden. Das ist
> Steinzeit.

Zeig mir ein vernünftiges (nicht konstruiertes) Beispiel, wo ein
fehlendes Semikolon erst 30 Zeilen später als Fehler erkannt wird.

von nur ungern C Programmierer (Gast)


Lesenswert?

Rolf M. schrieb:
> Du hattest doch geschrieben, dass du dir bessere Compilerwarnungen
> wünschst, weil es heute KI gibt.

Es gibt KI und C Compiler sind auf dem Stand von Dampfmaschinen. Jetzt 
kapiert?

Yalu X. schrieb:
> Schön, dass auch du inzwischen eingesehen hast, dass C-Compiler nicht
> grottig langsam sind.
???
Nö, das sind die größten Schnarchnasen unter den (heute, von Vielen 
benutzte) Compiler.

Yalu X. schrieb:
> Wenn ja: Warum zeigt er ihn dann überhaupt an und korrigiert ihn nicht
> gleich selbst?
Sorry, aber wie blöd stelltst du dich hier dar?
Wenn eine Abweichung festgestellt wird, bitte Hinweis auf Zeile und 
Zeichen, fertig. Der grottige C Compiler macht das nur beim Supergau.

Yalu X. schrieb:
> Zeig mir ein vernünftiges (nicht konstruiertes) Beispiel, wo ein
> fehlendes Semikolon erst 30 Zeilen später als Fehler erkannt wird.
Ich bin ja C Kumnmer gewohnt und greife daher nicht mehr so oft ins C 
Compiler Fettnäpfchen.

Das Ganze erinnert mich an die Diskussionen "nur AVR, bloß kein ARM!". 
Und die damaligen ARM-Hater rühren heute die ARM Werbetrommel und 
verfluchen die AVR.

von Yalu X. (yalu) (Moderator)


Lesenswert?

nur ungern C Programmierer schrieb:
> Yalu X. schrieb:
>> Zeig mir ein vernünftiges (nicht konstruiertes) Beispiel, wo ein
>> fehlendes Semikolon erst 30 Zeilen später als Fehler erkannt wird.
> Ich bin ja C Kumnmer gewohnt und greife daher nicht mehr so oft ins C
> Compiler Fettnäpfchen.

Mach dir deswegen keine Sorgen. Im Fettnäpfchen steckst du ja schon seit
deinem allerersten Beitrag in diesem Thread. Am besten belassen wir es
dabei, bevor du noch weiter darin einsinkst.

von ungern C Programmierer (Gast)


Lesenswert?

Yalu X. schrieb:
> Mach dir deswegen keine Sorgen. Im Fettnäpfchen steckst du ja schon seit
> deinem allerersten Beitrag in diesem Thread.

Nö, der Beitrag passt schon.

von Bernd K. (prof7bit)


Lesenswert?

nur ungern C Programmierer schrieb:
> Yalu X. schrieb:
>> Zum einen lernt man  mit der Zeit, die Fehlermeldungen richtig zu
>> interpretieren
>
> Na super! Auf der einen Seite geht es heute um KI und so ein popeliges
> Tool gibt Fehlermeldungen aus, deren Interpretation erlernt werden muss.
> :-<<<
>
> Sorry, das Zeugs ist von gestern!

Sorry, aber das ist doch Kindergarten und Bauchvermutungen von 
unbeteiligten Außenstehenden. Sobald man genug Erfahrung (mit welcher 
Sprache auch immer) hat um anzufangen ernsthafte Sachen damit zu machen 
hat man jede Fehlermeldung die vorkommen kann schon mehrmals gesehen und 
weiß ganz genau was sie bedeutet und wo man nach seinem Fehler zu suchen 
hat. Und in 99% der Fälle wird man sogar direkt mit der Nase auf die 
betreffende Codezeile gestoßen. Das ist in der Praxis(!) also überhaupt 
kein Problem, da verliert man überhaupt keine Worte mehr drüber.

von Dirk K. (merciless)


Lesenswert?

Erwin M. schrieb:
> Bei einigen .c-Dateien in einem Projekt zeigte sich eine Dateigröße von
> mehreren MB und mehrere zehntausend Zeilen Länge.
> Welche maximale Größe sollten Quellcodedatei haben, bezüglich Dateigröße
> und Zeilenanzahl?
Aus der Sicht von Clean Code würde ich jedes File,
das mehr als 1000 Zeilen enthält, als potentiell
zu groß bezeichnen.

Aus technischer Sicht gelten Limitierungen vom
jeweiligen Compiler und/oder Betriebs- bzw.
Filesystem.

merciless

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Dirk K. schrieb:
> Aus der Sicht von Clean Code würde ich jedes File,
> das mehr als 1000 Zeilen enthält, als potentiell
> zu groß bezeichnen.

Du hältst es also für wesentlich sauberer, als Array eingebettete 
Tabellen, Binärdateno.ä. in etliche Häppchen zu zerteilen und ggf. einen 
Haufen Code zu schreiben, der diese Tabellenstücke entweder zur Laufzeit 
oder durch obskure Präprozessoranweisungen zur Kompilierzeit wieder 
zusammensetzt? Oder eben den wenig portablen und aus Quellcodesicht 
verborgenen Weg über den Linker zu gehen? Das kann man so machen, aber 
dann wird es scheiße. BTDT

von Bernd K. (prof7bit)


Lesenswert?

Dirk K. schrieb:
> Aus der Sicht von Clean Code würde ich jedes File,
> das mehr als 1000 Zeilen enthält, als potentiell
> zu groß bezeichnen.

Und was ist dann die sinnvolle Vorgehensweise wenn ein Hardwaretreiber 
zum Beispiel 1200 Zeilen enthält und es beim besten Willen keine 
vernünftige(!) Trennlinie mehr zu ziehen ist welchen Teil man in ein 
separates eigenständiges Untermodul auslagern könnte weil all das 
bereits längst geschehen ist und jetzt echt nur noch das drin ist was 
wirklich dort reingehört (und nirgends anderswohin), weil man auch mit 
Gewalt nichts mehr refactorn könnte ohne es komplett zu vermurksen, und 
es sind immer noch 200 Zeilen zuviel? Oder 300? Oder 500? Was machst Du 
dann?

: Bearbeitet durch User
von qwertzuiopasdfghjklyxcvbnm (Gast)


Lesenswert?

Andreas S. schrieb:
> Dirk K. schrieb:
> Aus der Sicht von Clean Code würde ich jedes File,
> das mehr als 1000 Zeilen enthält, als potentiell
> zu groß bezeichnen.
>
> Du hältst es also für wesentlich sauberer, als Array eingebettete
> Tabellen, Binärdateno.ä. in etliche Häppchen zu zerteilen und ggf. einen
> Haufen Code zu schreiben, der diese Tabellenstücke entweder zur Laufzeit
> oder durch obskure Präprozessoranweisungen zur Kompilierzeit wieder
> zusammensetzt? Oder eben den wenig portablen und aus Quellcodesicht
> verborgenen Weg über den Linker zu gehen? Das kann man so machen, aber
> dann wird es scheiße. BTDT

Stell dich doch nicht dümmer, als du bist! Du weißt genau, wie er das 
gemeint hat.

von Sebastian S. (amateur)


Lesenswert?

Soweit mir bekannt ist gibt es keine maximale Quellcodegröße mehr.
Das heißt aber nicht, dass man seinen Quellcode unter Ausschluss von 
Hirn schreiben soll (Masochisten mal ausgenommen).

Für mich hat das Wort: Übersichtlichkeit einen sehr hohen Stellenwert.

Also was Zusammengehört sollte auch zusammen stehen. Aber nicht mehr.
Schon die Fehlersuche ist bei Endloscode ein Problem, da die 
Fehlermeldung fast immer an der falschen Stelle ausgegeben wird.

Auch wenn die heutigen Compiler relativ schnell sind unterstützt das 
Aufteilen in sinnvolle Brocken den gesamten Build Process, da 
üblicherweise nur die Teile neu übersetzt werden, an denen auch 
rumgefummelt wurde.

von DPA (Gast)


Lesenswert?

Erwin M. schrieb:
> Bei einigen .c-Dateien in einem Projekt zeigte sich eine Dateigröße von
> mehreren MB und mehrere zehntausend Zeilen Länge.

Obwohl man nicht nur nach der länge gehen kann, die C Dateien sind 
definitiv zu lang. Die Kunst ist es, verschiedenes sinnvoll aufzuteilen. 
Eventuell hilft es, sich zu fragen:
 1) Braucht es den Code überhaupt?
 2) Wozu gehört etwas?
 3) Wovon hängt es ab?
 4) Gibt es schon Code, der das oder etwas ähnliches macht? (Dann 
zusammenführen, verallgemeinern oder löschen)
 5) Kann man das noch übersichtlicher organisieren?

Idealerweise sollte das Programm so aufgebaut sein, dass man bei einem 
Problem sofort begreift, dass muss Komponente X in Datei Y sein, wegen 
Funktion Z. Die ganze Architektur, der Control Flow, sollte möglichst 
einfach zu begreifen sein.

Es braucht vor allem Übung.

Hat man z.B. diverse Listenartige Strukturen, und bearbeitet diese an 
verschiedensten stellen, dann kann man sich mal eine allgemeine 
Implementierung diverser Listen & Hilfsfunktionen anlegen oder holen, 
und in separate Dateien packen.

Hat man Funktionen, die nicht wirklich spezifisch zu irgendwas sind, 
kann man diese eventuell als Utillity Funktionen verallgemeinert 
auslagern.

Hat man Code für Textausgaben, zum Parsen von Zeugs, zum Verwalten von 
X, zur Verarbeitung von Y, oder zum Verehren von Katzen, dann packt man 
die Dinge in eigene Dateien, eventuell sogar in je mehr als eine, etc.

Bei manchen Sachen macht es auch sinn, jeder Funktion eine eigene Datei 
zu geben. Ich hab z.B. bei diesem Projekt von mir ein Parser für escape 
sequenzen, der bei jeder erkannten Escapesequenz die angegebene Funktion 
aufruft: 
https://github.com/Daniel-Abrecht/libttymultiplex/blob/master/src/parser.c#L36
Die Funktionen selbst sind dann aber alle in einem Unterordner in einer 
eigenen Datei, mit nur je 20-30 Zeilen code: 
https://github.com/Daniel-Abrecht/libttymultiplex/tree/master/src/sequencehandler

von Dirk K. (merciless)


Lesenswert?

Andreas S. schrieb:
> Du hältst es also für wesentlich sauberer, als Array eingebettete
> Tabellen, Binärdateno.ä. in etliche Häppchen zu zerteilen und ggf. einen
> Haufen Code zu schreiben, der diese Tabellenstücke entweder zur Laufzeit
> oder durch obskure Präprozessoranweisungen zur Kompilierzeit wieder
> zusammensetzt? Oder eben den wenig portablen und aus Quellcodesicht
> verborgenen Weg über den Linker zu gehen? Das kann man so machen, aber
> dann wird es scheiße. BTDT

Bernd K. schrieb:
> Und was ist dann die sinnvolle Vorgehensweise wenn ein Hardwaretreiber
> zum Beispiel 1200 Zeilen enthält und es beim besten Willen keine
> vernünftige(!) Trennlinie mehr zu ziehen ist welchen Teil man in ein
> separates eigenständiges Untermodul auslagern könnte weil all das
> bereits längst geschehen ist und jetzt echt nur noch das drin ist was
> wirklich dort reingehört (und nirgends anderswohin), weil man auch mit
> Gewalt nichts mehr refactorn könnte ohne es komplett zu vermurksen, und
> es sind immer noch 200 Zeilen zuviel? Oder 300? Oder 500? Was machst Du
> dann?

Ja nun gut, ich kann nicht von jedem erwarten,
dass er der deutschen Sprache mächtig ist.

Ich hab das Wort "potentiell" verwendet. Dies
suggeriert dem geneigten Leser, dass es auch
Ausnahmen geben kann/wird: generierter Code,
eingebettete Daten oder einfach nur die
fehlende Möglichkeit, den Code weiter zu zerlegen.
Auch wird es nicht passieren, dass Robert C. Martin
mit der Maschinenpistole im Anschlag in der
Tür steht, wenn man ein File größer macht.

Man man man, aber mal wieder schön getrollt.

merciless

von A. S. (Gast)


Lesenswert?

Dirk K. schrieb:
> Aus der Sicht von Clean Code würde ich jedes File,
> das mehr als 1000 Zeilen enthält, als potentiell
> zu groß bezeichnen.

Das bedeutet aber im Umkehrschluss: mit Clean Code kann ich nur kleine 
Projekte oder halt Sammlungen (Treiber etc.) machen.

Wenn 1000 eine Obergrenze ist, dann kann der Mittelwert (nach Pareto) 
nur bei wenigen 100 Zeilen liegen. Das ist für größere Projekte 
(>100.000 Zeilen) nicht sinnvoll.

von Jemand (Gast)


Lesenswert?

Andreas S. schrieb:
> Du hältst es also für wesentlich sauberer, als Array eingebettete
> Tabellen, Binärdateno.ä. in etliche Häppchen zu zerteilen und ggf. einen
> Haufen Code zu schreiben, der diese Tabellenstücke entweder zur Laufzeit
> oder durch obskure Präprozessoranweisungen zur Kompilierzeit wieder
> zusammensetzt? Oder eben den wenig portablen und aus Quellcodesicht
> verborgenen Weg über den Linker zu gehen? Das kann man so machen, aber
> dann wird es scheiße. BTDT

Das Problem gäbe es gar nicht, wenn C eine gescheite Möglichkeit zur 
Compile-Time Verarbeitung von Binärblobs, CSV, etc. aus externen Dateien 
hätte.
Trennung von Daten und Code und so.

von Bernd K. (prof7bit)


Lesenswert?

Jemand schrieb:
> Das Problem gäbe es gar nicht, wenn C eine gescheite Möglichkeit zur
> Compile-Time Verarbeitung von Binärblobs, CSV, etc. aus externen Dateien
> hätte.
> Trennung von Daten und Code und so.

Da kann man bequem herum arbeiten, das kann man immer noch absolut 
sauber trennen, auch wenn in irgendeiner Zwischenstufe generierter Code 
entsteht. Das würd ich eher als das allerkleinste von C's 
Unannehmlichkeiten betrachten.

von DPA (Gast)


Lesenswert?

A. S. schrieb:
> Wenn 1000 eine Obergrenze ist, dann kann der Mittelwert (nach Pareto)
> nur bei wenigen 100 Zeilen liegen. Das ist für größere Projekte
> (>100.000 Zeilen) nicht sinnvoll.

Angenommen, man hat 1000 Dateien mit rund 100 Zeilen Code bei einem 
größeres Projekt (>100.000 Zeilen), warum soll das nicht Sinvoll sein? 
Insbesondere, wenn man auch noch Unterordner verwendet, ist das doch 
kein Problem?

Jemand schrieb:
> Das Problem gäbe es gar nicht, wenn C eine gescheite Möglichkeit zur
> Compile-Time Verarbeitung von Binärblobs, CSV, etc. aus externen Dateien
> hätte.
> Trennung von Daten und Code und so.

Die Konvertierung kann man auch beim kompilieren machen. Dazu nutzt man 
ein Makefile. Dem ist es egal, was in welcher Sprache/Format da ist, es 
macht was auch immer man ihm sagt das es soll, um das Programm zu 
erstellen. Dann konvertiert man die Daten halt einem kleinen 
Hilfsprogramm nach C, und kompiliert das dann. Auch das Hilfsprogramm 
kann man sich vorher noch automatisch von make erstellen lassen. 
Insbesondere früher wusste man auch noch, wie man mit lex/yacc Parser 
schreibt, um das sogar mit komplexeren non-standard 
Daten/Programmstrukturen zu machen. Da das auch keine Unterstützung 
irgendwelcher speziellen/spezifischen Dateiformate in C selbst 
voraussetzt, ist die Lösung ja wohl auch viel versatiler und schöner.

von Dirk K. (merciless)


Lesenswert?

A. S. schrieb:
> Das bedeutet aber im Umkehrschluss: mit Clean Code kann ich nur kleine
> Projekte oder halt Sammlungen (Treiber etc.) machen.
>
> Wenn 1000 eine Obergrenze ist, dann kann der Mittelwert (nach Pareto)
> nur bei wenigen 100 Zeilen liegen. Das ist für größere Projekte
> (>100.000 Zeilen) nicht sinnvoll.

Ich empfehle dir die Lektüre des Buches von Robert C. Martin.

merciless

: Bearbeitet durch User
von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

DPA schrieb:
> Dann konvertiert man die Daten halt einem kleinen
> Hilfsprogramm nach C, und kompiliert das dann. Auch das Hilfsprogramm
> kann man sich vorher noch automatisch von make erstellen lassen.

Solch ein Vorgehen entspräche aber nur dann der hier als Evangelium 
vermittelten Clean-Code-Lehre, wenn sich auch das Hilfsprogramm an die 
1000-Zeilen-Beschränkung hielte.

von DPA (Gast)


Lesenswert?

Andreas S. schrieb:
> DPA schrieb:
>> Dann konvertiert man die Daten halt einem kleinen
>> Hilfsprogramm nach C, und kompiliert das dann. Auch das Hilfsprogramm
>> kann man sich vorher noch automatisch von make erstellen lassen.
>
> Solch ein Vorgehen entspräche aber nur dann der hier als Evangelium
> vermittelten Clean-Code-Lehre, wenn sich auch das Hilfsprogramm an die
> 1000-Zeilen-Beschränkung hielte.

Auch so ein Hilfsprogramm kann man in ein eigenes Unterverzeichnis 
packen, und in mehrere Dateien aufteilen. Man kann sogar gemeinsame 
Teile der Programme in Libraries auslagern oder einige Dateien in 
mehreren Programmen linken.

Normalerweise sind diese aber sehr viel kleiner. Bei meinem Fuserescue 
Projekt linke ich die Lizenz und das Readme mit rein, um es im Programm 
ausgeben zu können. Das Hilfsprogramm ist so kurz, ich hab es direkt in 
mein Makefile rein geschrieben: 
https://github.com/Daniel-Abrecht/fuserescue/blob/master/makefile#L26
(Im nachhinein betrachtet sollte ich das wohl noch so anpassen, dass man 
explizit angibt, wenn eine Datei unverändert eingelinkt werden soll.)

von Jemand (Gast)


Lesenswert?

DPA schrieb:
> Die Konvertierung kann man auch beim kompilieren machen. Dazu nutzt man
> ein Makefile. Dem ist es egal, was in welcher Sprache/Format da ist, es
> macht was auch immer man ihm sagt das es soll, um das Programm zu
> erstellen. Dann konvertiert man die Daten halt einem kleinen
> Hilfsprogramm nach C, und kompiliert das dann. Auch das Hilfsprogramm
> kann man sich vorher noch automatisch von make erstellen lassen.

Statt einem Einzeiler brauche ich ein externes Tool, welches meinen 
Datensatz auf ein Vielfaches ihrer Größe aufbläst, und muss das auch 
noch ins Buildsystem verwursten. So richtig überzeugend ist das nicht.

DPA schrieb:
> Da das auch keine Unterstützung
> irgendwelcher speziellen/spezifischen Dateiformate in C selbst
> voraussetzt, ist die Lösung ja wohl auch viel versatiler und schöner.

C muss keine speziellen Formate unterstützen, C muss Compile-Time 
Codeausführung unterstützen.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

DPA schrieb:
>> Solch ein Vorgehen entspräche aber nur dann der hier als Evangelium
>> vermittelten Clean-Code-Lehre, wenn sich auch das Hilfsprogramm an die
>> 1000-Zeilen-Beschränkung hielte.
>
> Auch so ein Hilfsprogramm kann man in ein eigenes Unterverzeichnis
> packen, und in mehrere Dateien aufteilen. Man kann sogar gemeinsame
> Teile der Programme in Libraries auslagern oder einige Dateien in
> mehreren Programmen linken.

Es geht nicht um die Länge des Hilfsprogramms selbst, sondern dass 
dieses Hilfsprogramm so geschrieben sein muss, dass die von ihm 
erzeugten Dateien eine maximale Länge von 1000 Zeilen aufweisen.

Das führt natürlich zu der putzigen Situation, dass die Anzahl und die 
Namen der später zu kompilierenden Dateien plötzlich von dem Inhalt der 
Ausgangsdatei abhängen, d.h. gestern ergab die Binärdatei noch 997 
Zeilen, die heutige Version dann 1002 Zeilen. Entweder muss dann also 
das Hilfsprogramm auch noch die entsprechenden Makefiles generieren oder 
das Build-System muss Wildcards zulassen. Und das nur, weil jemand für 
C-Quelltexte eine 1000-Zeilen-Beschränkung in Stein gemeißelt hat. 
Super! Und in der eigentlichen Anwendung darf dann auch nicht auf ein 
großes Array zugegriffen werden, sondern jeder Zugriff muss über eine 
weitere Tabelle o.ä. erfolgen, in der auf das jeweilige Häppchen 
verwiesen wird. Ganz toll. Damit wird also ein gewaltiger Wasserkopf in 
der Anwendung geschaffen, nur um ein paar willkürliche Richtlinien 
umzusetzen.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Andreas S. schrieb:
> Und das nur, weil jemand für C-Quelltexte eine
> 1000-Zeilen-Beschränkung in Stein gemeißelt hat.

Wer soll das getan haben?

Aber wenn es dir hilft, kannst du den Array-Initialisierer ja in eine
einzelne Zeile packen.

von DPA (Gast)


Lesenswert?

Jemand schrieb:
> DPA schrieb:
>> Die Konvertierung kann man auch beim kompilieren machen. Dazu nutzt man
>> ein Makefile. Dem ist es egal, was in welcher Sprache/Format da ist, es
>> macht was auch immer man ihm sagt das es soll, um das Programm zu
>> erstellen. Dann konvertiert man die Daten halt einem kleinen
>> Hilfsprogramm nach C, und kompiliert das dann. Auch das Hilfsprogramm
>> kann man sich vorher noch automatisch von make erstellen lassen.
>
> Statt einem Einzeiler brauche ich ein externes Tool, welches meinen
> Datensatz auf ein Vielfaches ihrer Größe aufbläst, und muss das auch
> noch ins Buildsystem verwursten. So richtig überzeugend ist das nicht.

In meinem verlinkten Beispiel wird das direkt per pipe in den gcc 
geschaufelt. Auf die art und weise wird die Datei nicht als ganzes 
verarbeitet, und die "Aufgeblasene" form muss nie irgendwo gespeichert 
werden. Im Binary ist es wieder die Form, in der man es ja sowieso 
braucht.

Und irgendwie verwurstet wird da auch nichts. Das Buildsystem ist dafür 
da, das man ihm sagt, wie man das Programm baut. Müsste man jedes 
Programm gleich bauen, bräuchte man es nicht, aber dann kann man es auch 
für nichts mehr brauchen.

Andreas S. schrieb:
> Es geht nicht um die Länge des Hilfsprogramms selbst, sondern dass
> dieses Hilfsprogramm so geschrieben sein muss, dass die von ihm
> erzeugten Dateien eine maximale Länge von 1000 Zeilen aufweisen.

Ich würde meinen, aus der Sicht der Clean-Code-Lehre ist generierter 
Code gar kein Code. Er wurde nicht geschrieben, also existiert er gar 
nicht. Die Dateien sind ja such nur Temporär, und können/werden auch 
immer wieder gelöscht.

von Bernd K. (prof7bit)


Lesenswert?

Jemand schrieb:
> C muss keine speziellen Formate unterstützen, C muss Compile-Time
> Codeausführung unterstützen.

Die Sachen für die ich gerne C-Code erzeugen will lassen sich in 
dynamischen Hochsprachen wie zum Beispiel Python viel einfacher und 
prägnanter hinschreiben und warten als wenn ich das in C machen würde. 
Man muss nicht alles nochmal neu erfinden wenn es schon fertige Tools 
gibt die man einfach nehmen kann.

von Dirk K. (merciless)


Lesenswert?

Andreas S. schrieb:
> ...Geblubber entfernt

Schönes Wetter zum Trollen, gell?
Niemand kommt und schneidet dir die
Eier ab, wenn du mehr als 1000 Zeilen
in ein File packst, ganz besonders
dann nicht, wenn es sich um Daten
handelt, die eingebettet werden.

merciless

von Erwin M. (nobodyy)


Lesenswert?

Wie wäre es wenn man hier für jeden Kommetar zahlen müsste, z. B. zwei 
Cent; würde die Maßnahme den Spam/das Trollen hier verringen oder eher 
erhöhen, nach dem Motto "Ich habe doch dafür bezahlt"?
Gibt es dazu schon Studien?

von Peter D. (peda)


Lesenswert?

Andreas S. schrieb:
> Du hältst es also für wesentlich sauberer, als Array eingebettete
> Tabellen, Binärdateno.ä. in etliche Häppchen zu zerteilen

Wozu sollte man sowas verrücktes machen? Aus meiner Sicht ist das gar 
kein Code im herkömmlichen Sinn. Niemand muß darin irgendwelche 
Algorithmen und Abläufe verstehen oder ändern.
Ich würde solche Datenfelder sogar als eigenständiges Projekt aufbauen 
und dann die fertige Binärdatei zum ausführenden Code hinzufügen (linken 
oder anhängen).
Es kann auch sinnvoll sein, daß solche Datenfelder überhaupt nicht in 
den ausführbaren Code kommen, sondern in einen externen seriellen Flash. 
Man kann so Daten ändern oder hinzufügen, ohne die Applikation neu 
compilieren zu müssen. Z.B. um Schriftarten, Bilder, Sounds oder 
Animationen zu ändern.

Code ist für mich nur das, wo man auch Gehirnschmalz reingesteckt hat. 
D.h. Dein Nachfolger sollte die Abläufe darin verstehen können, um ihn 
warten und erweitern zu können.

von Vlad T. (vlad_tepesch)


Lesenswert?

ich weiß, dass das Visual Studio 10 Probleme mit Code-Dateien über 65k 
+x Zeilen hatte.

Zumindest der Debugger kam damit überhaupt nicht klar. (Der Compiler 
hats anstandslos gefressen)

Aufgefallen war mir das, als ich ein Program debuggen wollte, was das 
SQLite  amalgamation - c File nutzte - ich musste damals das file auf 2 
oder 3 aufteilen.
Das aktuelle amalgamation file (--> 
https://www.sqlite.org/download.html) ist fast 223000 Zeilen groß.

: Bearbeitet durch User
von leo (Gast)


Lesenswert?

Vlad T. schrieb:
> Das aktuelle amalgamation file (-->
> https://www.sqlite.org/download.html) ist fast 223000 Zeilen groß.

Wow, das ist ja x-fach krank:
- der Debugger (MS?) kommt nicht damit zurecht
- Entwickler nutzen wohl eher einzelne Files (schon mal "make -j" auf 
einer 64 CPU Sun gestartet) - i.e. die parallele Verarbeitung wird damit 
verhunzt
- Endanwender werden wohl ein fertiges Paket installieren

Zum TO - kommt darauf an, aber bei ca. 10k Zeilen wird wohl ein Split 
übersichtlicher.

leo

von DPA (Gast)


Lesenswert?

leo schrieb:
> Vlad T. schrieb:
>> Das aktuelle amalgamation file (-->
>> https://www.sqlite.org/download.html) ist fast 223000 Zeilen groß.
>
> Wow, das ist ja x-fach krank:

Ja, aber das ist bei den "amalgamation" also "Zusammenschluss" auch 
nicht erstaunlich. Warum die so einen scheiss bieten, keine Ahnung. 
Links zu den Repos hab ich hier gefunden: (abschnitt 3.1)
https://sqlite.org/whynotgit.html#the_official_github_mirror

Und als ich den mist unter: https://sqlite.org/copyright.html und 
https://sqlite.org/src/artifact/df5091916dbb40e6 gelesen habe, WTF. Also 
SQLite ist für mich tot.

von Vincent H. (vinci)


Lesenswert?

DPA schrieb:
> Warum die so einen scheiss bieten, keine Ahnung.

Ich vermute mal um auch ohne LTO möglichste kleine Binaries zu erzeugen.

von Vlad T. (vlad_tepesch)


Lesenswert?

DPA schrieb:
> Warum die so einen scheiss bieten, keine Ahnung.
> Links zu den Repos hab ich hier gefunden: (abschnitt 3.1)
> https://sqlite.org/whynotgit.html#the_official_github_mirror

ich fand es sehr bequem.
Einfach eine Datei dem Projekt hinzufügen und schon hat man sqlite drin.
Kein umständliches Lib-Bauen oder hunderte extra-files dem Projekt 
hinzufügen.

Außerdem bietet der Ansatz dem Compiler beste Möglichkeiten zur 
Optimierung.

hier ist dazu auch was:
https://www.sqlite.org/amalgamation.html

da steht auch was über ein split-amalgamation was sie anbieten wegen 
Debuggingproblemen über 32k lines. vielleicht hab ich mich auch um eine 
Potenz getäuscht.

von Martin (Gast)


Lesenswert?

Erwin M. schrieb:
> Bei einigen .c-Dateien in einem Projekt zeigte sich eine Dateigröße von
> mehreren MB und mehrere zehntausend Zeilen Länge.
> Welche maximale Größe sollten Quellcodedatei haben, bezüglich Dateigröße
> und Zeilenanzahl?

Eigentlich ist die Frage in der Form unzureichend beschrieben, denn die 
.c oder .h Dateigröße ist eigentlich unerheblich. Wichtiger für den 
Compiler ist die Größe der Translation Unit, also das .i file ausgegeben 
vom Präprozessor. (Wer bei GCC bugs submittet soll auch immer die .i/.ii 
files nehmen, weil da alles zum Übersetzen/Reproduzieren des Fehlers 
enthalten ist und keine obskuren header fehlen.)

Eine andere Beschränkung wäre die maximale Größe für den AST.

von S. R. (svenska)


Lesenswert?

DPA schrieb:
> Ja, aber das ist bei den "amalgamation" also "Zusammenschluss" auch
> nicht erstaunlich. Warum die so einen scheiss bieten, keine Ahnung.

SQLite ist kein normales Projekt, sondern vermutlich das weltweit 
meistverbreitete Stück Software. Das wird auch da eingesetzt, wo die 
Compiler- und Buildinfrastruktur wesentlich weniger gut ausgebaut ist.

Deswegen gilt dort noch immer C89 und kein Verlass auf 
Compilererweiterungen (wie z.B. LTO) oder Infrastruktur (wie z.B. make, 
CMake oder irgendwas anderes).

von Johann J. (johannjohanson)


Lesenswert?

Erwin M. schrieb:
> Welche maximale Größe sollten Quellcodedatei haben, bezüglich Dateigröße
> und Zeilenanzahl?

424242 Byte mit rund 5300 Zeilen Code.
Aber ordentlich vollschreiben!

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.