GNU Versionen in FreeBSD?

Woher hast du eigentlich deine CFLAGS kopiert?
Kann ich das in den Sourcecode einkopieren und er kompiliert es mit den Optionen? ^^
Es wäre schön zu wissen, was sie machen, ohne jetzt wieder Links zu wälzen.
Kurze Beschreibung wäre toll.
In den Sourcecode kopieren geht nicht.

Was Du machen musst hängt von Deinem Build-System ab. Was verwendest Du?
 
Übers Programmieren in C.
Du hast große Pläne und viel vor, weißt aber momentan noch nichteinmal, was ein Build-System ist. Daher sehe ich ein ernüchterndes Erwachen auf dich zukommen.
Mir ging es früher nicht viel anders und es geht mir auch jetzt noch oft genug so, aber Programmieren ist nicht so einfach, wie es immer scheint.
Darum solltest du dich schon jetzt darauf einstellen, dass du nur sehr langsam vorankommen wirst.

Da du nach Büchern über C gefragt hast, ich habe „The C Programming Language“, das ist das Referenzwerk von Kernighan und Ritchie und gibt einen schnellen Überblick.
Dazu kann ich dir „The UNIX Programming Environment“ von Kernighan und Pike empfehlen, da wird dir auch make(1) als Build-System erklärt. Die Code-Beispiele sind aber etwas in die Jahre gekommen, meine Ausgabe ist ein Jahr jünger als ich ;) Pre-ANSI C ist schon ein eigenes Tier… Und wenn es dir wirklich ernst ist, „Advanced Programming in the UNIX Environment“ von Stevens und Rago ist das ultimative Referenzwerk für Systemnahe Programmierung auf POSIX-Systemen.
 
Du hast große Pläne und viel vor, weißt aber momentan noch nichteinmal, was ein Build-System ist. Daher sehe ich ein ernüchterndes Erwachen auf dich zukommen.
Mir ging es früher nicht viel anders und es geht mir auch jetzt noch oft genug so, aber Programmieren ist nicht so einfach, wie es immer scheint.
Da ich selbst ein Dilletant bin kann ich das nur bestätigen. Das Programieren ist eine Sache, und nicht unbedingt das schwierigste (kommt eben darauf an...). Aber das build-system ist bei C/C++ ein ganz anderes Thema. Ich habe kürzlich versucht mich in CMake ein wenig reinzufummeln. Obwohl Yamagi sagt dass das sehr einfach ist, bin ich doch gescheitert. Ich verstehe einfach die Logik des Ganzen nicht. Also zurück zu gmake, was aber auch ein kleiner Hammer ist wenn man etwas umfangreicheres vor hat. Ein guter Teil der Zeit geht damit drauf die entsprechenden Libraries zu finden und kennen zu lernen. Und gewöhnen sollte man sich auch an sprachspezifische Idiome, das macht das Leben leichter.

@ninti
Es kommt darauf an was du machen willst. Wenn es Low-Level ist geht kein Weg an C/C++ vorbei. Ich meine aber das C++ im Grunde einfacher ist als C, zumindest so lange man die Finger von Templates läßt. Und da würde ich clang benutzen, nicht gcc. In diesem Falle ist wohl gmake (nicht das eingebaute make) das build-system der Wahl, oder eben CMake. Der einzige Nachteil von C++ ist m.E. die größere RuntimeLib weshalb für kleinere Tools C vorzuziehen ist.

Sollte das ein umfangreicheres und sehr komplexes Vorhaben sein würde ich Erlang/OTP (http://www.erlang.org/) mit Elixier (http://elixir-lang.org/) als Frontend empfehlen, also nicht in erlang selbst programmieren. Allemal weit besser als Java oder riesige C++ Packete und hat alles was man so braucht, zumindest a.d. Server. Graphische UIs sind ein anderes Thema...

Bücher ? Na ja, da mußt du schon genauer fragen oder einfach mal sagen was du im Sinne hast . Ich gehöre zwar auch zu den Leuten die sich gerne 1/2 Dutzend Bücher kaufen bevor sie etwas anfangen, aber praktisch ist man heute doch meist auf online Dokumentationen angewiesen.

Peter
 
Aber darauf achten, dass man die zweite Auflage kauft, die behandelt ANSI-C.
Sorry, genau die meinte ich auch. Das ist zwar C90, aber der Unterschied zwischen C90 und C11 ist geringer als der zwischen K&R (Pre-ANSI) und ANSI, finde ich.

Da ich selbst ein Dilletant bin kann ich das nur bestätigen. Das Programieren ist eine Sache, und nicht unbedingt das schwierigste (kommt eben darauf an...). Aber das build-system ist bei C/C++ ein ganz anderes Thema. Ich habe kürzlich versucht mich in CMake ein wenig reinzufummeln. Obwohl Yamagi sagt dass das sehr einfach ist, bin ich doch gescheitert. Ich verstehe einfach die Logik des Ganzen nicht. Also zurück zu gmake, was aber auch ein kleiner Hammer ist wenn man etwas umfangreicheres vor hat. Ein guter Teil der Zeit geht damit drauf die entsprechenden Libraries zu finden und kennen zu lernen. Und gewöhnen sollte man sich auch an sprachspezifische Idiome, das macht das Leben leichter.
Ich sehe keinen Vorteil von gmake gegenüber make(1). Sofern man komplexe Architekturen hat macht CMake noch einiges mehr. Die Sprache ist zwar häßlich und es ist alles andere als einfach, aber zweiteres liegt in der Natur der Aufgabe, die man damit erfüllen möchte. Ich habe bisher noch keine gangbare Alternative für größere Projekte gefunden.

Es kommt darauf an was du machen willst. Wenn es Low-Level ist geht kein Weg an C/C++ vorbei. Ich meine aber das C++ im Grunde einfacher ist als C, zumindest so lange man die Finger von Templates läßt. Und da würde ich clang benutzen, nicht gcc. In diesem Falle ist wohl gmake (nicht das eingebaute make) das build-system der Wahl, oder eben CMake. Der einzige Nachteil von C++ ist m.E. die größere RuntimeLib weshalb für kleinere Tools C vorzuziehen ist.
Das sehe ich anders. C++ ist sehr, sehr komplex und hat viele subtile Fallstricke, die sie in meinen Augen für Anfänger gänzlich ungeeignet machen. Die automatische Generierung von Zuweisungsoperatoren und -konstruktoren beispielsweise. C ist im Gegensatz dazu im Sprachumfang zwar ziemlich eingeschränkt, hat aber deutlich weniger „Regeln“ die man beachten muss.
Zu clang würde ich zwar bei jeder C-artigen Sprache raten, aber am Ende ist es immer besser, wenn der Code von mehreren Compilern auf der höchsten Warnstufe kompiliert wird. Auch Compilerautoren interpretieren den Standard subtil unterschiedlich.
 
Na ja, über Vor- und Nachteile von C und C++ brauchen wir hier nicht zu diskutieren, Fallen bauen sie beide. :rolleyes: Es ist in keinem Falle falsch beide zu lernen, und wenn man das eine kann ist das andere nicht weiter schwierig.

Ich wollte noch einmal erwähnen dass hinsichtlich Portabilität in Richtung Linux natürlich gmake und GCC vorzuziehen sind.
 
Noch ein Nachtrag zu tail. Auf FreeBSD hat tail außer der -f Option auch die Option -F, welche ich immer benutze. Diese erkennt nämlich, dass eine Datei von logrotate umbenannt und neu angelegt wurde. -f würde einfach stoppen und nichts weiter ausgeben.
 
ein ernüchterndes Erwachen auf dich zukommen
eher für dich :)
Ich bin schon längst am Lesen, Lernen und Programmieren. :)
Wäre echt total schwachsinnig, zig Fragen zu stellen und noch gar nicht angefangen zu haben. ^^
Na ja, sieht ja so aus, dass solche oft in Foren grassieren. :)
 
Dreck, zu lange getippt.

Fortsetzung:

Mir ging es früher nicht viel anders und es geht mir auch jetzt noch oft genug so, aber Programmieren ist nicht so einfach, wie es immer scheint.
Darum solltest du dich schon jetzt darauf einstellen, dass du nur sehr langsam vorankommen wirst.
Vor allem wenn alle "Drecks-Bücher" die gleiche Tour durchziehen, nämlich erst mal so häppchenweise Infos rüberwachsen lassen und den/die Leser/in total verwirren.
Da wird immer auf weitere Kapiteln verwiesen, aber erst mal lernen wir nur 2 Sachen, aber im Code zeigen wir schon mal andere Sachen, die wir nicht behandeln, neeeiiiinnnn
Ich steh auf so etwas gar nicht!
Aber was soll ich machen, die Leute können vielleicht Coden, aber schreiben können die nicht.
Vor allem wenn manche Sätze so richtig in die Tonne kloppen kann.
Das beste dabei, das was wichtig ist, ist eher "logisch", was noch blau markiert wird und das was wirklich wichtig ist, ist eher so marginal. Ich krieg immer das Kotzen wenn ich immer so etwas sehe.
Und das liegt nicht am Lernen von C.
Ich lerne sehr gerne C aber das Lesen von so einem Drecksbuch ist das Letzte.

Aber kommen wir zurück zu den Büchern.
Ich möchte erst mal "alle" möglichen Bücher auf deutsch lesen und dann kann ich mir auch die englischen antun, da ich auch nicht wirklich soooo gut englisch kann und eher befürchte, dass ich alle 3 Sekunden ins Wörterbuch schauen muss. ^^

Vielleicht wird mir das mit dem Build-System noch erklärt? Irgendwo so als kleine Notiz, wobei ich wieder durchdreh ^^

Was für Bücher ich meinte?
Ich suche DAS Buch für Anfänger, wo ich aber gleich das ganze Paket an Informationen bekomme und nicht stückchenweise oder noch besser im Anhang, was mir am Ende nicht weiter bringen wird.
Dh. behandeln wir Variablen, dann soll in dem Kapitel alles über variablen stehen, auch wenn jedes Thema riesig ist.

Ich lese gerade C als erste Programmiersprache - was ja soooo gut sein soll ^^

ANSI, C90 oder jetzt nicht C99? ^^
So weit ich lerne, bleibe ich bei C99, hat hier jemand vorgeschlagen. ;)
Ist das jetzt schlecht?
Ja, die alten ANSI C Bücher werde ich auch durchackern, aber die frage ist, ob C99 auch nicht gut ist?

So weit ich denke, wird von mir nichts größeres gecoded, also lass mal die scheuen Pferde im Stall. :D


Zu clang würde ich zwar bei jeder C-artigen Sprache raten, aber am Ende ist es immer besser, wenn der Code von mehreren Compilern auf der höchsten Warnstufe kompiliert wird
ich benutze schon clang mit vielen Warnungen:
clang -std=c99 -Wall -Wextra -Werror -pedantic

reicht das erst mal aus?


Ich wollte noch einmal erwähnen dass hinsichtlich Portabilität in Richtung Linux natürlich gmake und GCC vorzuziehen sind.
Ist gcc inkompatibel zu clang?
 
Aber was soll ich machen, die Leute können vielleicht Coden, aber schreiben können die nicht.
Willkommen im Techie-Land! :rolleyes: DAS Buch für Anfänger gibt es nicht. Über den richtigen/besten/praktischsten Weg zu Programmieren gibt es genau so viele Meinungen wie Programmierer. Da mußt du dich schon selbst durchfummeln und dir eine Meinung bilden.
Vielleicht wird mir das mit dem Build-System noch erklärt? Irgendwo so als kleine Notiz, wobei ich wieder durchdreh
Ein C/C++ Programm besteht aus einer Menge an Quell-Dateien (*.c oder *.cpp), Header dateien (*.h oder *.hpp) und Bibliotheken. Bei den letzteren gibt es noch statische (*.a) die direkt eingebunden werden, und dynamische (*.so) die zur Laufzeit eingebunden werden. Und das alles wird dann durch einen Linker zusammen gebunden und zu einem Programm oder eben einer Bibliothek gemacht. Das erledigt dann das Build-System. Und natürlich muss man die Kommandozeilen Parameter der Compiler kennen.
Ich lese gerade C als erste Programmiersprache - was ja soooo gut sein soll ^^
K & R ist wohl immer noch die beste Einführung in C, und Stroustrup in C++.
ANSI, C90 oder jetzt nicht C99? ^^
C99 ist heute standard.
So weit ich denke, wird von mir nichts größeres gecoded, also lass mal die scheuen Pferde im Stall. :D
Wenn du die Konzepte noch nicht verstehst würde ich an deiner Stelle mit Lua anfangen. Da gibt es eine gut lesbares Buch auf deutsch (Programmieren in Lua ) und dann kannst du von da aus C-Biblotheken entwickeln und einbinden. Aber wenn du Leiden möchtest, bleib bei C...:)
Ist gcc inkompatibel zu clang?
Weitgehend:
http://clang.llvm.org/comparison.html
http://clang.llvm.org/compatibility.html
 
Programmieren in Lua
Wird das dann auch nicht wieder so ein "Techie-Land"-Buch sein? ^^
Außerdem, wenn ich schon Lua lernen "sollte" dann würde ich mir eher Python antun.
Aber ich möchte eben gleich das richtige haben, wobei ich schon etwas Ahnung von Programmieren habe.

Ich bräuchte vielleicht eher ein Buch, wo ich keinen Code lerne, sondern das Programmieren per se.
Also die Ansätze, die Logik usw.

Build-System
Na ja, bevor ich solche fetten Projekte "anfange" zu coden, werde ich da wohl eher wenig bis gar nicht mit dem Build-System zu tun haben.

K&R Buch:
Da habe ich auch mal kurz reingeguckt und die machen die gleiche "Scheiß"-Methode.
Und ich habe gesehen, dass "mein" Buch das gleich hat, was die da auch schon haben.
Deshalb Zähne zusammenbeißen, das Buch verfluchen und weiter lernen. :)
 
Ich kann nicht so gut englisch, deshalb bevorzuge ich vor erst auch deutsche Bücher.
kannst du mir das kurz erklären bzw. wie gravierend die Unterschiede sind, sollte ich dann doch gcc nehmen?
Bei einem Code gerade, zeigt gcc eine Fehlermeldung, wo eigentlich nicht sein kann und clang sagt da nichts und compiliert es fertig.

PS"Langsam hasse ich das hier mit dem Bearbeiten und dann nicht mehr :( "
Nicht immer fällt mir auch alles ein, was ich fragen möchte. :)
 
ninti schrieb:
Ich bräuchte vielleicht eher ein Buch, wo ich keinen Code lerne, sondern das Programmieren per se.
Ich finde, dass zum "Programmieren lernen" C so ziemlich die denkbar ungeeignetste Sprache ist. Ich habe nichts gegen C. Im Gegenteil. Ich mache fast alles darin. Aber C war schon 1972 sehr minimal und ist heute konzeptionell einfach überholt. Das geht schon damit los, dass C so grundlegende Dinge wie Objektorientierung und Generizität (also z.B. C++ Templates) seitens der Sprache der nicht unterstützt. Ich würde daher jedem raten, mit einer modernen Sprache anzufangen. Mein Tipp - auch auf die Gefahr hin auf dem Scheiterhaufen verbrannt zu werden - ist noch immer: http://www.amazon.de/dp/3868940014 Der deutsche Titel ist ein wenig dumm gewählt, dass englische "Objects first with Java" passt besser. Java ist das Werkzeug, das Ziel ist aber die objektorientierte Programmierung.
 
Wird das dann auch nicht wieder so ein "Techie-Land"-Buch sein? ^^
Na ja, Lua wurde mal für Techies, nicht für Programmierer entwickelt, insofern schon recht leicht verständlich und eben auch deutsch. Aber natürlich steht da nicht drin für was eine Schleife gut ist, nur wie man sie verwendet.
Außerdem, wenn ich schon Lua lernen "sollte" dann würde ich mir eher Python antun.
Python: dick. fett und langsam :rolleyes: Da ist Lua schon eine andere Nummer. Vor allem kannst du da alles leicht ausprobieren und auch recht leicht C einbetten. YMMV
Aber ich möchte eben gleich das richtige haben, wobei ich schon etwas Ahnung von Programmieren habe.
Hmmm, Ahnung vom Programmieren ? Wie auch immer: C/C++ ist nicht "das richtige", es ist das richtige für bestimmte Sachen. Und faktisch lernt es jeder irgendwann. Ich stimme Yamagi bzgl. einer geeigneten Lernsprache weitgehend zu, obwohl ich Java und OOP eher für eine Krankeit halte, aber weder für eine gute Platform noch eine gute Sprache oder ein gutes Paradigma. Na ja... ;)
Build-System
Na ja, bevor ich solche fetten Projekte "anfange" zu coden, werde ich da wohl eher wenig bis gar nicht mit dem Build-System zu tun haben
Es geht dabei nicht um "fett", sondern um Modularisierung und das brauchst du wenn du halbwegs vernünftigen Code schreiben willst. Also lieber gleich ins kalte Wasser springen. Und so schwierig ist (g)make nun wieder auch nicht.
 
Wird das dann auch nicht wieder so ein "Techie-Land"-Buch sein? ^^
Na ja, Lua wurde mal für Techies, nicht für Programmierer entwickelt, insofern schon recht leicht verständlich.
Außerdem, wenn ich schon Lua lernen "sollte" dann würde ich mir eher Python antun.
Python: dick. fett und langsam :rolleyes: Da ist Lua schon eine andere Nummer. Vor allem kannst du da alles leicht ausprobieren und auch recht leicht C einbetten. YMMV
Aber ich möchte eben gleich das richtige haben, wobei ich schon etwas Ahnung von Programmieren habe.
Hmmm, Ahnung vom Programmieren ? Wie auch immer: C/C++ ist nicht "das richtige", es ist das richtige für bestimmte Sachen. Ich stimme Yamagi bzgl. einer geeigneten Lernsprache weitgehend zu, obwohl ich Java und OOP eher für eine Krankeit halte, aber weder für eine gute Platform noch eine gute Sprache. Na ja... ;) Und 'n büschen veraltet auch noch!
Build-System
Na ja, bevor ich solche fetten Projekte "anfange" zu coden, werde ich da wohl eher wenig bis gar nicht mit dem Build-System zu tun haben
Es geht dabei nicht um "fett", sondern um Modularisierung und das brauchst du wenn du halbwegs vernünftigen Code schreiben willst. Also lieber gleich ins kalte Wasser springen. Und so schwierig ist (g)make nun wieder auch nicht.

Ich habe mal programmieren mit FORTH gelernt, das war prima da man da leicht nachvollziehen konnte was die Maschine macht.
 
Hups, hätte ich beinahe übersehen ...
kannst du mir das kurz erklären bzw. wie gravierend die Unterschiede sind, sollte ich dann doch gcc nehmen?
Bei einem Code gerade, zeigt gcc eine Fehlermeldung, wo eigentlich nicht sein kann und clang sagt da nichts und compiliert es fertig.
Die Unterschiede sind eigentlich nicht relevant, es werden nur einige eher exotische Features von GCC nicht unterstützt. Aber natürlich unterscheiden sich alle Compiler hinsichtlich Interpretation des Standards und Art der Fehlerbehandlung ein wenig. Man ist in jedem Falle gut beraten so zu programmieren dass der Code mit beiden läuft.

Hast du beide in C99 laufen ? Evtl. Fehlerlevel ändern oder das Beanstandete eben ändern..
 
Hast du beide in C99 laufen ? Evtl. Fehlerlevel ändern oder das Beanstandete eben ändern..
Ja, stets jetzt mit C99-Überprüfung/Standard
Na gut, jetzt ist es nicht so wichtig, da ich noch lerne. Aber am Ende sollte es doch der gcc sein?
Bzw. ist gcc portabler als clang? :)

Hier hat noch nicht jemand erwähnt, wie die anderen Warnungs-Flags bedeuten ;)
-Wpedantic - ich habe das ohne W, ist das was anderes?
-Weverything \
-Wno-documentation \
-Wno-padded \
-Wno-reserved-id-macro \
-Wno-vla \


Kurze Beschreibung wäre sehr nett, da ich noch nicht so derbe englisch kann, dass ich solche Sachen auch gleich verstehen würde.
Danke schön
 
Bzw. ist gcc portabler als clang? :)
Clang ist m.W. nur bei FreeBSD und beim Mac Standard, sonst GCC, auch unter Windows leicht zu installieren. Da du unter BSD beides haben kannst, würde ich auch beides benutzen.

Mach es dir doch nicht so schwer. An Flags reicht eigentlich -std=c99, -Wall und evtl. -Wextra. Ob -pedantic Sinn macht weiss ich nicht, habe ich noch nie verwendet. Was du sonst noch brauchst sind -I<Pfad zu deinen includes>, -L<pfad zu deinen libraries> und -l<library>.Ansonsten macht auch hier ein Versuch klug.

Du solltest bedenken dass C eine uralte Sprache ist und alle möglichen Besonderheiten von Standarts, Compilern, Prozessoren und Platformen über eine Unmenge von Flags geregelt werden. Darüber brauchst du dir jetzt nicht den Kopf zu zerbrechen. Wichtig ist immer erst einmal etwas zum Laufen zu bekommen (printf() ist dein Freund), schön machen und optimieren kannst du das dann immer noch (sollte aber nicht unter den Tisch fallen).

Und um ein büschen techie-englisch kommst du nicht drum herum, gewöhne dich besser gleich daran. Vielleicht ist der Google Übersetzer da sogar hilfreich. Habe ich aber keine Erfahrung mit.
 
Clang ist m.W. nur bei FreeBSD und beim Mac Standard, sonst GCC, auch unter Windows leicht zu installieren. Da du unter BSD beides haben kannst, würde ich auch beides benutzen.

Clang ist auch unter Linux verfügbar. Und zumindest bei C und C++ sollte man compilerunabhängigen Code schreiben, weswegen ich vorschlage, mehr als nur einen zu verwenden und zu testen.

Ob -pedantic Sinn macht weiss ich nicht, habe ich noch nie verwendet.

-pedantic meckert compilerspezifische Erweiterungen im Quellcode an, somit macht es in meinen Augen sehr viel Sinn.

Du solltest bedenken dass C eine uralte Sprache ist und alle möglichen Besonderheiten von Standarts, Compilern, Prozessoren und Platformen über eine Unmenge von Flags geregelt werden. Darüber brauchst du dir jetzt nicht den Kopf zu zerbrechen. Wichtig ist immer erst einmal etwas zum Laufen zu bekommen (printf() ist dein Freund), schön machen und optimieren kannst du das dann immer noch (sollte aber nicht unter den Tisch fallen).

An der Stelle sehe ich die Gefahr, dass man recht bald nicht standardkonforme Erweiterungen für Elemente der Sprache hält und dann nicht-konformen Code produziert. Aber da ist eben die Frage, was die Zielsetzung ist. Mit -std=c99 -pedantic ist ninti aber auf einem guten Weg, wie ich finde, das sollte halbwegs portablen und modernen Code ergeben.[/QUOTE]

Und um ein büschen techie-englisch kommst du nicht drum herum, gewöhne dich besser gleich daran. Vielleicht ist der Google Übersetzer da sogar hilfreich. Habe ich aber keine Erfahrung mit.

Wer programmieren willst kommt in meinen Augen absolut garnicht um Englisch herum. Und das wird auch nicht nur „ein bisschen“ sein.
Fast alle Bibliotheken sind auf englisch programmiert und dokumentiert, ich kann mir nur schwer vorstellen, soetwas ohne Englischkenntnisse zu verwenden. Von der Zusammenarbeit mit nicht-deutschsprachigen Entwicklern mal ganz zu schweigen.
Klar, der letzte Punkt liegt vermutlich noch in weiterer Ferne, aber man kommt recht bald an den Punkt, an dem man fremden Code verwenden will, außer man will wirklich absolut alles selber machen.
 
Hier hat noch nicht jemand erwähnt, wie die anderen Warnungs-Flags bedeuten ;)
Das steht in der Dokumentation des verwendeten Compilers ;) Wie im vorigen Beitrag erwähnt wirst du um Englisch kaum herumkommen. Generell gehört es zum guten Ton, sich selbst zu informieren und sich nicht alles vorkauen zu lassen, sonst verlieren die Leute recht schnell die Lust zu Helfen. Einfach unüberlegt Code aus dem Internet zu kopieren ist aber mindestens genauso schlimm, wenn nicht sogar schlimmer, daher erkläre ich es lieber ;)

-Wpedantic - ich habe das ohne W, ist das was anderes?
Nein, es gibt beide Formen.

Diese Option gibt es nur bei clang, nicht bei gcc. Sie schaltet alle Warnungen an, die verfügbar sind, weshalb auch viele „unnötige“ Dinge angemökelt werden. Einzelne davon stelle ich nachfolgend wieder aus, weil ich weiß dass sie für mich kein Problem darstellen.

-Wno-documentation
Clang überprüft Dokumentationskommentare, wenn da ein Schlüsselwort nicht erkannt wird, dann gibt es eine Warnung.
Das ist mir aber egal, weil das so gut wie immer aus fremden Bibliotheken kommt. Und da das ein kleines Nebenprojekt im Anfangsstadium ist, habe ich die Warnungen schlicht und einfach unterdrückt. Bei größeren und ernsthafteren Projekten sollte man das aber auf andere Weise lösen.

Das ist vor allem für C++ relevant. Klassen und Strukturen müssen wie alle Datentypen im Speicher ausgerichtet werden. Wenn eine Struktur also eine Größe hat, die nicht direkt zwischen Ausrichtungsgrenzen passt, dann fügt der Compiler einen Puffer ein, damit in einem Array alle Strukturen oder Objekte auf der nächsten zulässigen Grenze liegen.
Mir ist die Ausrichtung meistens egal, wenn ich für den Desktop programmiere habe ich genug Speicher. Sofern du nicht in beschränkten Umgebungen arbeitest kannst du das meiner Meinung nach einsetzen.

-Wno-reserved-id-macro
Das stellt eine Warnung ab, die ebenfalls aus fremden Code kommt. Definitiv schlechter Stil von mir, ich habe die Warnung übernommen, weil der Compiler sie angezeigt hat und es mit nicht all zu genau interessiert, wo sie herkommt. Ich wollte einfach den Code compilieren. Daher solltest du sie definitiv ignorieren.

Ich habe C11 anstatt C99 eingesetzt, dort gibt es ein Feature namens “Variable Length Array”. Da du dich für C99 entschieden hast ist diese Option irrelevant für dich.
 
goblin schrieb:
Ich habe C11 anstatt C99 eingesetzt, dort gibt es ein Feature namens “Variable Length Array”. Da du dich für C99 entschieden hast ist diese Option irrelevant für dich.
<klugscheiß>VLA gibt auch schon in C99. Wobei man bei VLA natürlich eh immer die Möglichkeit eines Stack-Overflows im Kopf behalten muss.</klugscheiß>
 
Ich dachte in C11 wären VLAs wieder abgeschafft?

Ich verzichte inzwischen auf die. Ursprünglich fand ich das mal gut aber inzwischen denke ich, wenn man keine vertretbare Maximalgröße garantieren kann, hat es auf dem Stack nichts zu suchen. Ich habe da zum Beispiel einen Puffer der unter keinen Umständen größer als 63 Byte wird. Meistens ist der deutlich kleiner aber ich reserviere halt trotzdem einfach die 63 Byte auf dem Stack.
 
Zurück
Oben