====== Programmierung in C/C++ ======
Einige allgemeine Infos zu den Sprachen C/C++ und deren Authoren:
* [[https://de.wikipedia.org/wiki/C_(Programmiersprache)|Programmiersprache C]]: [[https://de.wikipedia.org/wiki/Brian_W._Kernighan|Brian W. Kernighan]] und [[https://de.wikipedia.org/wiki/Dennis_Ritchie|Dennis Ritchie]] (Entwickler des [[https://de.wikipedia.org/wiki/Unix|UNIX]]-Betriebssystems)
* [[https://de.wikipedia.org/wiki/C%2B%2B|Programmiersprache C++]]: [[https://de.wikipedia.org/wiki/Bjarne_Stroustrup|Bjarne Stroustrup]]
----
.
Infos zum Kompilieren/Linken sind unter [[EDV:PRG:GCC]], [[EDV:PRG:Make]] (für die GNU Compiler Collection) und [[EDV:PRG:IDE:MsVisualStudio|MS Visual Studio]] (für den Microsoft Compiler) zu finden.
* GCC-Pragmas: [[https://gcc.gnu.org/onlinedocs/gcc/Pragmas.html#Pragmas]]
Compatibility of C and C++: [[https://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B]]
Siehe auch **[[https://wiki.ubuntuusers.de/GCC/#Empfohlene-Parameter|Empfohlene Parameter]]** (von "ubuntuusers.de").
===== Tools =====
**Analyse-** und Entwickler-Tools:
^Unix/Linux ^^
|ar |Libraries modifizieren / anzeigen lassen, etc. |
|dump | |
|ldd |Abhängigkeiten eines ausführbares Programms / einer (dynamischen) Library anzeigen lassen. |
|nm |Inhalt (Symbols) einer Library / Executable anzeigen lassen. |
|binscan |Abhängigkeiten eines ausführbares Programms / einer (dynamischen) Library anzeigen lassen, mit GUI.\\ [[https://sourceforge.net/projects/binscan/]] |
|ELF Library Viewer\\ (Think of it as a graphical ldd program.)|Abhängigkeiten eines ausführbares Programms / einer (dynamischen) Library anzeigen lassen, mit GUI.\\ [[http://www.purinchu.net/software/elflibviewer.php]] |
| | |
^Windows ^^
|dumpbin.exe\\ lib.exe |Libraries modifizieren / anzeigen lassen, etc. |
|Dependency Walker |Abhängigkeiten in DLLs ermitteln. |
|Beyond Compare |Textdateien (Quelltexte) und Ordner vergleichen, um Unterschiede aufzuspüren und abzugleichen. |
Statische Code-Analyse (Info unter[[https://de.wikipedia.org/wiki/Statische_Code-Analyse]]):
* **C** - Splint: [[https://de.wikipedia.org/wiki/Splint_(Software)]]
* **C++** - Cppcheck: [[https://de.wikipedia.org/wiki/Cppcheck]]
Dynamische Code-Analyse (Info unter[[https://de.wikipedia.org/wiki/Dynamisches_Software-Testverfahren]]):
* **Valgrind** (Memcheck):
* Teil 1: [[https://www.heise.de/developer/artikel/Einfuehrung-in-die-Arbeit-mit-Valgrind-und-Memcheck-Teil-1-2480976.html]]
* Teil 2: [[https://www.heise.de/developer/artikel/Einfuehrung-in-die-Arbeit-mit-Valgrind-und-Memcheck-Teil-2-2488710.html]]
===== Spezielle Themenbereiche =====
[[EDV:PRG:C:64-Bit-Architektur]] - Datenmodelle (LLP64/LP64/ILP64/SILP64), Bit-Breite von Integer-Datentypen
[[EDV:PRG:C:ELF]] - Executable and Linking Format (Unix)
[[EDV:PRG:C:Library|Statische Libraries]]
* (VisualStudio) Walkthrough: Creating and Using a Static Library (C++)\\ [[https://docs.microsoft.com/de-de/cpp/build/walkthrough-creating-and-using-a-static-library-cpp?view=vs-2019]]
[[EDV:PRG:C:DLLs|DLLs / dynamische Libraries / DSOs / shared libraries]]
* (VisualStudio) Walkthrough: Create and use your own Dynamic Link Library (C++)\\ [[https://docs.microsoft.com/de-de/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp?view=vs-2019]]
[[EDV:PRG:C:CPU-Typ identifizieren]]
* Google gibt Code zur CPU-Funktionsanalyse frei: [[http://www.linux-magazin.de/news/google-gibt-code-zur-cpu-funktionsanalyse-frei/]]
* **cpu_features** auf Github: [[https://github.com/google/cpu_features]]
**Sanitizer** (deutsch "Desinfektionsmittel"): [[https://github.com/google/sanitizers]] - AddressSanitizer, MemorySanitizer, ThreadSanitizer, LeakSanitizer.
===== Allgemeine Tipps: =====
[[EDV:PRG:C:Tipp:Vordefinierte Präprozessor-Direktiven]] (ANSI C), **Makros** (Predefined Macros) und **String-Literal**-Operator
[[EDV:PRG:C:Tipp:Big-Endian und Little-Endian]], Unbedingt beachten: [[https://de.wikipedia.org/wiki/Byte-Reihenfolge#Plattform.C3.BCbergreifende_Darstellung_von_Zahlen|Plattformübergreifende Darstellung von Zahlen]] (insbesondere bei der seriellen Übertragung)
[[EDV:PRG:C:Tipp:Makros-Kollisionen]] vermeiden
[[EDV:PRG:C:Tipp:Plattform-Makros]] für Plattform- und Compilerübergreifende Programme (Stichwort: Portabilität) (FIXME)
[[EDV:PRG:C:Tipp:Einbetten von Versionsinformationen]] (FIXME)
[[EDV:OS:UNIX:Signale]] (nur UNIX/Linux)
[[EDV:PRG:C:man:Dynamische Speicherverwaltung]] - malloc(), calloc(), realloc(), free(), alloca(); Hinweise für Portierung von 32- auf 64-Bit (**32-/64-Bit** Pointer).
[[EDV:PRG:C:man:Zugriff auf das FileSystem]] - stat(), rename(), remove(), chmod(), access(), utime(), getcwd(), mkdir(), rmdir(), chdir(), realpath(), dirname() und basename(), opendir(), readdir() und readdir_r(), closedir(), etc. (FIXME)
[[EDV:PRG:C:Tipp:errno]] - :!: Es gibt einiges zu beachten!
[[EDV:PRG:C:Tipp:Zeit-Funktionen]] - time(), localtime(), localtime_s(), localtime_r(), clock(), clock_gettime(), TZ, etc. und weitere Beispiele (FIXME)
[[EDV:PRG:C:Tipp:Funktionen mit variabler Anzahl von Parameter]] (FIXME)
[[EDV:PRG:C:Example:Bit-Operatoren]]
[[EDV:PRG:C:Example:Operationen mit Strings]] (FIXME)
[[EDV:PRG:C:man:Makros min() und max()]]
[[EDV:PRG:C:man:Makro offsetof()]]
Vorsicht bei Verwendung von **[[http://man7.org/linux/man-pages/man3/putenv.3.html|putenv()]]** - es kann zu memory leaks führen! Stattdessen die **[[http://man7.org/linux/man-pages/man3/setenv.3.html|setenv()]]** verwenden.\\ Warum, wird hier ausführlich erklärt: [[http://stackoverflow.com/questions/5873029/questions-about-putenv-and-setenv]]\\ ...oder auch hier: [[http://www.greenend.org.uk/rjk/tech/putenv.html]]
[[http://www.lcs-chemie.de/ddd.htm|Kurzanleitung für Debugger DDD / KDbg]]
[[EDV:PRG:C:Example:backslash2slash.sh]] Ein kurzes Skript für die Portierung auf Unix - ersetzt alle Back-Slashes in den "#include"-Direktiven (.c- und .h-Files) durch Slashes.
**[[EDV:PRG:Sichere Programmierung]]** - Hier findet man ebenfalls einige nützliche Hinweise.
[[Extern linkage und C language linkage]]
:!: Das Schlüsselwort [[EDV:PRG:CPP:Keywords:explicit]] //(Seit C++11)// verhindert implizite Typumwandlungen (beim Constructor)
:!: Funktionen, die ausschließlich innerhalb eines Modules verwendet werden, sollen mit dem Schlusselwort **%%static%%** deklariert werden. Das schränkt die Sichtbarkeit solcher Funktionen auf das jeweilige Modul (sprich auf ein ".c"-File). Es beugt den evtl. Namenskonflikten vor, wenn z.B. mehrere Module für ihre Funktionen gleiche Namen verwenden.
==== Datentypen ====
[[EDV:PRG:C:DataTyp:Data Type Ranges]]
[[EDV:PRG:CPP:DataTyp:Datentype für Zeichen und Strings]] FIXME - char, wchar_t, char16_t, char32_t, u16string, u32string
[[EDV:PRG:C:DataTyp:printf() - Formatierungszeichen]] (Formatzeichen, Steuerzeichen, Escape-Sequenzen) FIXME
[[EDV:PRG:C:DataTyp:Definition von neuen Datentypen]] (mit "typedef", "#define", Probleme bei anonymen Typen, etc.)
**GMP** - The **G**NU **M**ultiple **P**recision Arithmetic Library: [[https://de.wikipedia.org/wiki/GNU_Multiple_Precision_Arithmetic_Library]]
* Offizielle GMP Website: [[https://gmplib.org/]]\\ //GMP is a free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating-point numbers. There is no practical limit to the precision except the ones implied by the available memory in the machine GMP runs on.//
* Anwendungsbeispiel:\\ Computing billions of π digits using GMP: [[https://gmplib.org/pi-with-gmp.html]]
Tuple: [[https://dieboostcppbibliotheken.de/boost.tuple]]
===== Programmbeispiele in C: =====
[[EDV:PRG:C:C lernen]] - Einige Beispiele und Übungen. (FIXME)
:!: Die meisten Beispiele sind vereinfacht dargestellt. Sie sollen nicht als konkrete und fertige Lösungen verstanden werden, sondern vielmehr als Lösungsansätze, die zu einer Lösung in jeweiligen konkreten Fällen führen.
[[EDV:PRG:C:Example:Signalbehandlung]]
[[EDV:PRG:C:Example:Aktuellen Timestamp erfassen]]
[[EDV:PRG:C:Example:Zeitabstände messen]] bzw. Laufzeit eines Programms / einer Funktion berechnen
[[EDV:PRG:C:Example:Kommunikation über Named Pipes]]
[[EDV:PRG:C:Example:Zufällige int-Zahl]]
[[EDV:PRG:C:Example:Textfile öffnen - mit Versuchszähler]], Basisfunktion: [[EDV:PRG:C:stdio.h:fopen()]]
[[EDV:PRG:C:Example:Textfile schließen/löschen - mit Versuchszähler]]
[[EDV:PRG:C:Example:Textfile lesen 01|Textfile lesen]]
[[EDV:PRG:C:Example:Aus mehreren Files blockweise lesen]], Basisfunktion: [[EDV:PRG:C:stdio.h:fread()]] FIXME
[[EDV:PRG:C:Example:logging_ext]]: Logging-Modul - nützliche Log-Funktionen (FIXME)
[[EDV:PRG:C:Example:trim_ext]]: Trim-Modul - Funktionen um die Leerzeichen vorne und hinten bei einem String wegschneiden
[[EDV:PRG:C:Example:Array of Messages]]: Alle Messages, die ein Programm ausgibt, an einer Stelle zusammen halten
[[EDV:PRG:C:Example:Zweidimensionale dynamische Arrays]]
[[EDV:PRG:C:Example:Beispiel CPU-Time Funktionen]]
[[EDV:PRG:C:Example:Vorlage C-Programm]]: Ein Gerüst für ein C-Programm
[[EDV:PRG:C:Example:Debug-Makros]] - Einige nützliche Beispiele, die sich beim "Debuggen" als hilfreich erwiesen haben
[[EDV:PRG:C:Example:Environment lesen]] - Verschiedene Wege, die Environment-Variablen zu lesen
Parsing Program Arguments: [[http://www.gnu.org/software/libc/manual/html_node/Parsing-Program-Arguments.html#Parsing-Program-Arguments]] (getopt / argp_parse / suboptions)
[[EDV:PRG:C:Example:get_CurrentExecutable()]] - Filename des gerade ausgeführten Moduls herausfinden
uname() - get name and information about current kernel: [[http://man7.org/linux/man-pages/man2/uname.2.html]]
* **Zeichenweise** lesen aus **stdin** mit **getchar()** (und schreiben auf "stdout" mit "putchar()") und ein etwas portableres **getch()**:\\ [[http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/016_c_ein_ausgabe_funktionen_006.htm#t2t32]]
* **Zeichenweise** lesen **dateiorientiert** mit **getc()** bzw. **fgetc()** (und schreiben mit "putc()" bzw. "fputc()"):\\ [[http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/016_c_ein_ausgabe_funktionen_007.htm]]
* **Zeilenweise** lesen mit **gets()** bzw. **fgets()** (und schreiben mit "puts()" bzw. "fputs()"):\\ [[http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/016_c_ein_ausgabe_funktionen_016.htm#t2t32]]
* **Zeilenweise** einlesen vom Stream mit **getline()** (nicht ANSI C):\\ [[http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/016_c_ein_ausgabe_funktionen_016.htm#t2t34]]
* **Ncurses** (C-Bibliothek für die Steuerung von Textterminals): [[https://de.wikibooks.org/wiki/Ncurses]]
* Ncurses-Doku als PDF: [[https://upload.wikimedia.org/wikibooks/de/b/b3/Ncurses.pdf]]
===== Programmbeispiele in C++: =====
[[EDV:PRG:CPP:Crashkurs|C++ Crashkurs]] - Einige Beispiele / Übungen.
[[EDV:PRG:CPP:Example:static_assert()]] (C++11)
[[EDV:PRG:CPP:Example:Auf der Kommandozeile übergebene Parameter parsen]]
[[EDV:PRG:CPP:Example:Aktuellen Timestamp erfassen]]
[[EDV:PRG:CPP:Example:Trim]]
[[EDV:PRG:CPP:Example:Stringutils]] - Helper rund um die Strings (trim, trim_left, trim_right, pad_left, pad_right, to_upper, replace, compare_nocase, split, split_lines)
[[EDV:PRG:CPP:Example:Fileutils]]
[[EDV:PRG:CPP:Example:"Spontan" auf eine dynamische Library zugreifen]]
**Zeit** in C++20: Kalendertermine erstellen: [[https://www.heise.de/blog/Zeit-in-C-20-Kalendertermine-erstellen-9671530.html?wt_mc=nl.red.ho.ho-nl-newsticker.2024-04-09.link.link]]\\ //(Der Artikel taucht tiefer in das Konzept von Kalenderdaten in C++ ein und zeigt, wie man sie erstellt.)//
:!: Vorsicht bei der **[[EDV:PRG:CPP:Example:Zuweisung eines Objekts an Static Member einer Klasse]]**! (Relevant für den GNU-Compiler)
:!: Vorsicht bei der **[[EDV:PRG:CPP:Example:Initialisierung eines Objekts bei dessen Deklaration]]**! (Relevant für den GNU-Compiler)
:!: [[EDV:PRG:CPP:Example:Export von Klassen/Strukturen/Methoden/Funktionen, die STL-Objekte (oder Templates allgemein) als Member/Parameter verwenden]] (insbesondere für DLLs relevant)
Size of array:
* Suche: [[http://www.bing.com/search?q=c%2B%2B+size+of+array]]
* How to get the size of an Array? [[http://stackoverflow.com/questions/874169/how-to-get-the-size-of-an-array]]
:!: Achtung! Das Schlüsselwort **abstract** (um virtuelle Methoden als abstrakte Methoden zu gekennzeichnen) kann zwar in MS VisualStudio verwendet werden, ist jedoch nicht Bestandteil von C++! Stattdessen, insbesondere für den portablen Code, die C++ Notation verwenden:virtual type_of_method pure_virtual() = 0;
\\ Hier ist die Info auf MSDN:
* [[https://msdn.microsoft.com/en-us/library/xey702bw%28v=vs.120%29.aspx|Component Extensions for Runtime Platforms]] (englisch)
* [[https://msdn.microsoft.com/en-us/library/b0z6b513%28v=vs.120%29.aspx|abstract (C++ Component Extensions)]] (englisch)
* [[https://msdn.microsoft.com/de-de/library/b0z6b513%28v=vs.120%29.aspx|abstract (Komponentenerweiterungen für C++)]] (deutsch)
...und auf [[http://www.programmerinterview.com/]]:
* [[http://www.programmerinterview.com/index.php/c-cplusplus/c-abstract-keyword/|Does C++ have a keyword for "abstract"?]] (englisch)
* [[http://www.programmerinterview.com/index.php/c-cplusplus/pure-virtual-function/|What is a pure virtual function?]] (englisch)
Die [[EDV:PRG:CPP:Example:xxxxxx_s()]]-Funktionen nachbauen - memcpy_s(), strcpy_s(), strncpy_s()
===== Externe Links zum Thema: =====
:!: Linux C++ Software Development: [[http://www.yolinux.com/TUTORIALS/LinuxTutorialC++.html]] - Links to Linux C++ GUI frameworks, APIs, IDEs, as well as C++ tips for Linux developers.
[[http://www.willemer.de/informatik/unix/unprfork.htm]] - Arnold Willemer: **Programmierung UNIX-Prozesse**
[[http://pronix.linuxdelta.de/C/Linuxprogrammierung/index.shtml]] - Jürgen Wolf: **Linux/Unix-Systemprogrammierung**
[[http://www.minet.uni-jena.de/dbis/lehre/ws2006/c-c++/slides6.pdf]] - Knut Stolze: Systemnahe Programmierung in C/C++ - **Interprozesskommunikation (IPC)** -
[[http://www.fbi.h-da.de/~a.schuette/Vorlesungen/Unix/Skript/C-Programmierung/Interprozesskommunikation.pdf]] - Prof. Dr. Alois Schütte: Unix für Entwickler: **Interprozesskommunikation**
[[http://www2.fh-fulda.de/~gross/parallel.bachelor/kap2.pdf]] - Prof. Dr. S.Groß: **Parallelverarbeitung**
**Unix domain socket**:\\ in [[http://en.wikipedia.org/wiki/Unix_domain_socket|Wikipedia]] (englisch), [[http://de.wikipedia.org/wiki/POSIX_local_inter-process_communication_socket|Wikipedia]] (deutsch), und unter [[http://www.netzmafia.de/skripten/server/ThomasSocket2.pdf]]
Artikel zu C und C++: [[http://www.kompf.de/cplus/artikel/index.html]]
Linux System Call Table (eine Tabelle mit den **Linux-Syscalls** für 64-Bit-Systeme): [[http://thevivekpandey.github.io/posts/2017-09-25-linux-system-calls.html]]\\ (Code hosted at [[https://github.com/thevivekpandey/syscalls-table-64bit]])
==== C ====
[[http://pronix.linuxdelta.de/C/standard_C/index.shtml]] - Jürgen Wolf: **C von A bis Z** (Online-Version des Buches)
[[http://www2.fh-fulda.de/~klingebiel/c-stdlib/]] - Axel Stutz, Peter Klingebiel, FH Fulda, DVZ: **Übersicht über die C Standard-Bibliothek** (//, , , , , , , , , , , //)
==== C++ ====
C++ Standards Support in GCC (Welche C++ Eigenschaften ab welchen GCC Versionen verfügbar sind):\\ [[https://gcc.gnu.org/projects/cxx-status.html]]
**C++11:**
* C11: Neue Version der Programmiersprache (2012)
* Teil 1: [[http://www.heise.de/developer/artikel/C11-Neue-Version-der-Programmiersprache-Teil-1-1661014.html]]
* FIXME
* C++11-Standard: Was ist neu? [[https://www.informatik-aktuell.de/entwicklung/programmiersprachen/c-uebersicht-der-neuerungen-des-standards-in-der-version-11.html]]
[[http://www.cplusplus.com/]] - Umfangreiche Sammlung von Tutorials, C++Referenzen und Artikeln. Ein Forum ist auch dabei (englisch).\\ **C++Reference:** [[http://www.cplusplus.com/reference/]]\\ \\ Hier einzeln:
* [[http://www.cplusplus.com/reference/clibrary/|C library]]
* [[http://www.cplusplus.com/reference/stl/|Containers]]
* [[http://www.cplusplus.com/reference/iolibrary/|Input/Output]]
* [[http://www.cplusplus.com/reference/multithreading/|Multi-threading]]
[[http://ladedu.com/cpp/]] - Heinz Tschabitscher: **Einführung in C++-Programmierung**
Generische Programmierung (**Templates**): [[http://www.willemer.de/informatik/cpp/cpptempl.htm]]
**Modernes C++ in der Praxis** (von Rainer Grimm):
* Folge 1: [[http://www.linux-magazin.de/Ausgaben/2011/12/C-11/]] - Die Elf spielt auf
* Folge 2: [[http://www.linux-magazin.de/Ausgaben/2012/02/C-11/]] - Lambda-Funktionen
* Folge 3: [[http://www.linux-magazin.de/Ausgaben/2012/04/C-11/]] - Mehrgleisig unterwegs (Multithreading-Fähigkeit)
* Folge 4: [[http://www.linux-magazin.de/Ausgaben/2012/06/C-11/]] - Gemeinsam ins Ziel (mehrere Threads)
* Folge 5: [[http://www.linux-magazin.de/Ausgaben/2012/08/C-11/]] - Im Gleichtakt (Synchronisieren von Threads)
* Folge 6: [[http://www.linux-magazin.de/Ausgaben/2012/10/C-11/]] - Alle im Einklang (Promise und Future - Synchronisation mehrerer Threads)
* Folge 7: [[http://www.linux-magazin.de/Ausgaben/2012/12/C-11/]] - Rasch verschoben
* Folge 8: [[http://www.linux-magazin.de/Ausgaben/2013/02/C-11/]] - Räumkommando (Unique Pointer)
* Folge 9: [[http://www.linux-magazin.de/Ausgaben/2013/04/C-11/]] - Klug aufgeräumt (Smart Pointer)
* Folge 10: [[http://www.linux-magazin.de/Ausgaben/2013/06/C-11/]] - Zähl mich! (reguläre Ausdrücke)
* Folge 11: [[http://www.linux-magazin.de/Ausgaben/2013/08/C-11/]] - Starke Ausdrücke (reguläre Ausdrücke)
* Folge 12: [[http://www.linux-magazin.de/Ausgaben/2013/10/C-11/]] - Suchen und ersetzen (reguläre Ausdrücke)
* Folge 13: [[http://www.linux-magazin.de/Ausgaben/2013/12/C-11/]] - Geschwindigkeit zählt (Hashtabellen)
* Folge 14: [[http://www.linux-magazin.de/Ausgaben/2014/02/C-11/]] - Neue Ausdruckskraft (Range-basierte For-Schleife)
* Folge 15: [[http://www.linux-magazin.de/Ausgaben/2014/04/C-11/]] - C++11 + 3 = C++14
* Folge 16: [[http://www.linux-magazin.de/Ausgaben/2014/06/C-11/]] - Der Vertrag (Memory-Modell, atomare Variablen)
* Folge 17: [[http://www.linux-magazin.de/Ausgaben/2014/08/C-11/]] - Automatik mit Methode
* Folge 18: [[http://www.linux-magazin.de/Ausgaben/2014/10/C-11/]] - Schönes Objekt
* Folge 19: [[http://www.linux-magazin.de/Ausgaben/2014/12/C-11/]] - Kurs zum Mars (neue Literale: Raw-String- und benutzerdefinierte Literale)
* Folge 20: [[http://www.linux-magazin.de/Ausgaben/2015/02/C-11/]] - Statisch geprüft (static_assert() und die Type-Traits-Bibliothek)
* Folge 21: [[http://www.linux-magazin.de/Ausgaben/2015/04/C-11/]] - Für vorsichtige Raser (Type-Traits-Bibliothek)
* Folge 22: [[http://www.linux-magazin.de/Ausgaben/2015/06/C-11/]] - Konstante Magie ("constexpr")
* Folge 23: [[http://www.linux-magazin.de/Ausgaben/2015/08/C-11/]] - Punktlandung (Variadic Templates)
* Folge 24: [[http://www.linux-magazin.de/Ausgaben/2015/10/C-11/]] - Containerverwaltung
* Folge 25: [[http://www.linux-magazin.de/Ausgaben/2015/12/C-11/]] - Der Reihe nach verpackt (Containern)
* Folge 26: [[http://www.linux-magazin.de/Ausgaben/2016/02/C-11/]] - Doppelte Packung (die Referenz-Wrapper)
* Folge 27: [[http://www.linux-magazin.de/Ausgaben/2016/04/C-11/]] - Die Zeit verstehen (Zeitbibliothek)
* Folge 28: [[http://www.linux-magazin.de/Ausgaben/2016/06/C-11/]] - Pünktlich verschlafen (Zeitbibliothek)
* Folge 29: [[http://www.linux-magazin.de/Ausgaben/2016/08/C/]] - Zukunftsmusik
* Folge 30: [[http://www.linux-magazin.de/Ausgaben/2016/10/C/]] - Bibliotheks-Karriere
* Folge 31: [[http://www.linux-magazin.de/Ausgaben/2016/12/C/]] - Von der Theorie zur Praxis
* Folge 32: [[http://www.linux-magazin.de/Ausgaben/2017/02/C/]] - Delinquente Typen
* Folge 33: [[http://www.linux-magazin.de/Ausgaben/2017/04/C/]] - Programmiere deklarativ
* Folge 34: [[http://www.linux-magazin.de/Ausgaben/2017/06/C/]] - Selbstoptimiert (Move-Semantik und konstanten Ausdrücken)
* Folge 35: [[http://www.linux-magazin.de/Ausgaben/2017/08/C/]] - Compiler first!
* Folge 36: [[http://www.linux-magazin.de/Ausgaben/2017/10/C]] - Crash nach Flash
* Folge 37: [[http://www.linux-magazin.de/Ausgaben/2017/12/C]] - Kein Verlass
* Folge 38: [[http://www.linux-magazin.de/ausgaben/2018/02/c/]] - (über Lesbarkeit von Code) FIXME
* Folge 39: [[http://www.linux-magazin.de/ausgaben/2018/04/c/]] - (über "static_assert") FIXME
* Folge 40: [[http://www.linux-magazin.de/ausgaben/2018/06/c-2/]] - Kenne deine Bibliotheken
* Folge 41: [[http://www.linux-magazin.de/ausgaben/2018/08/c-3/]] - Strebe nach Einfachheit
* FIXME
Blog **Modernes C++** von Rainer Grimm auf Heise: [[https://www.heise.de/developer/ModernesCplusplus-3691794.html]]
[[http://de.wikipedia.org/wiki/Boost_(C%2B%2B-Bibliothek)|Boost (C++-Bibliothek)]] - Eine __freie__ C++-Bibliothek, die aus einer Vielzahl von __portablen__ Unterbibliotheken besteht.\\
Online-Buch **Die Boost C++ Bibliotheken** (deutsch): [[http://www.highscore.de/cpp/boost/]]
[[http://msdn.microsoft.com/en-us/library/hh279654(v=vs.110).aspx]] - MSDN: Welcome Back to C++ (Modern C++)
[[http://www.angelikalanger.com/Articles/Topics.html#CPP]] - Angelika Langer: C++ Articles (in verschiedenen Sprachen)\\ [[http://www.angelikalanger.com/Articles/ObjektSpektrum/C++Templates/C++Templates.html| Programmieren mit C++ Templates]]\\ [[http://www.angelikalanger.com/Articles/Elektronik/ReliableC++/ResourceAllocation.html|Fehlerfreies Programmieren in C++ - Dynamische Allokation von Ressourcen]]
In der Klasse "std::string" fehlt die **trim**-Funktion. Im Thread [[http://stackoverflow.com/questions/216823/whats-the-best-way-to-trim-stdstring|What's the best way to trim std::string]] auf [[http://stackoverflow.com/]] wird über verschiedene Lösungsansätze diskutiert.
Performance Unterschied von **std::vector** und **std::list**: [[http://baptiste-wicht.com/posts/2012/12/cpp-benchmark-vector-list-deque.html]]
static_cast, const_cast, dynamic_cast, reinterpret_cast und C-Casts: [[https://de.wikibooks.org/wiki/C%2B%2B-Programmierung/_N%C3%BCtzliches/_Casts]]
Herb Sutter - Elements of Modern C++ Style: [[http://herbsutter.com/elements-of-modern-c-style/]] - Neuerungen in C++11 gegenüber C++98.
C++/11: Eine Einführung in **Lambda** Funktionen: [[http://www.indiedev.de/wiki/C%2B%2B/11:_Eine_Einf%C3%BChrung_in_Lambda_Funktionen]]
MSDN: **Lambda**-Ausdrücke in C++: [[http://msdn.microsoft.com/de-de/library/dd293608.aspx]]
:!: **UnitTests** (Microsoft.VisualStudio.TestTools.CppUnitTestFramework): [[http://jk-wiki.kreick.de/doku.php?id=edv:prg:ide:msvisualstudio#unittest]]
**SEH** (**S**tructured **E**xception **H**andling): [[https://msdn.microsoft.com/de-de/library/swezty51(v=vs.120).aspx]]
**libstdc++** Source Documentation: [[https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/]]
* Namespace List: [[https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html]]
* **std** Namespace Reference: [[https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01616.html]]
Warum **using** ein besserer **typedef** ist? Hier ist die Antwort: [[https://stackoverflow.com/questions/10747810/what-is-the-difference-between-typedef-and-using-in-c11]]\\ (The **using** syntax has an advantage when used within templates.)
Entwurfsmuster Singleton Pattern: [[https://cplusplus-development.de/c/cplusplus-erweitert/entwurfsmuster-singleton-pattern]]
==== UTF8 ====
[[http://www.cprogramming.com/tutorial/unicode.html|Unicode in C and C++: What You Can Do About It Today]] (englisch) von [[webmaster@cprogramming.com|: Alex Allain]]
[[http://www.evanjones.ca/unicode-in-c.html|Using Unicode in C/C++]] (englisch) von [[evanj@csail.mit.edu|: Evan Jones]]
:!: Eine hilfreiche Tabelle mit **Unicode**-/**UTF8**-Zeichen: [[http://www.utf8-zeichentabelle.de/]]
Weitere Tabelle: [[http://www.isthisthingon.org/unicode/index.php]]
==== Shared Memory ====
MSDN: [[http://msdn.microsoft.com/en-us/library/aa366551(v=vs.85).aspx|Creating Named Shared Memory]]
MSDN: [[http://msdn.microsoft.com/en-us/library/ms686958(v=vs.85).aspx|Using Shared Memory in a Dynamic-Link Library]]
==== Filesystem ====
ADMIN-Tipp: [[http://www.admin-magazin.de/News/Tipps/ADMIN-Tipp-Dateiaenderungen-ueberwachen?utm_source=ADMIN+Newsletter&utm_campaign=ADMIN-Newsletter-2013-27&utm_medium=email|Dateiänderungen überwachen]] von Oliver Frommel\\ //Die Inotify-Schnittstelle des Linux-Kernels erlaubt es, Dateien und Verzeichnisse im Blick zu behalten. Mit der Python-API lassen sich dafür eigene Skripte schreiben.//
==== Resource-Files (nur Windows) ====
MinGW:
* windres: [[https://sourceware.org/binutils/docs/binutils/windres.html]]
* MS resource compiler: [[http://www.mingw.org/wiki/MS_resource_compiler]]
Auf MSDN:
* VERSIONINFO resource: [[https://msdn.microsoft.com/en-us/library/windows/desktop/aa381058(v=vs.85).aspx]]
* Using RC (The RC Command Line): [[https://msdn.microsoft.com/en-us/library/windows/desktop/aa381055(v=vs.85).aspx]]
==== Verschlüsselung ====
=== mit OpenSSL ===
Oliver Müller auf "Heise Developer":\\ **OpenSSL: Implementierung innerhalb eines Client- und Server-Programms** (2010)
* Teil 1, **Schlüsselfertig**:\\ [[http://www.heise.de/developer/artikel/OpenSSL-Implementierung-innerhalb-eines-Client-und-Server-Programms-Teil-1-1050619.html]]
* Teil 2, **Aufgeschlossen**:\\ [[http://www.heise.de/developer/artikel/OpenSSL-Implementierung-innerhalb-eines-Client-und-Server-Programms-Teil-2-1058771.html]]
* Teil 3, **Fehlerträchtig**:\\ [[http://www.heise.de/developer/artikel/OpenSSL-Implementierung-innerhalb-eines-Client-und-Server-Programms-Teil-3-1157455.html]]
* Teil 4, **Mehrspurig**:\\ [[http://www.heise.de/developer/artikel/OpenSSL-Implementierung-innerhalb-eines-Client-und-Server-Programms-Teil-4-1157918.html]]
=== mit Boost.Asio ===
Oliver Müller auf "Heise Developer":\\ **SSL/TLS-Netzwerkprogrammierung mit Boost.Asio** (2016)
* Teil 1, **Grundlagen** (Auftrieb):\\ [[http://www.heise.de/developer/artikel/SSL-TLS-Netzwerkprogrammierung-mit-Boost-Asio-Teil-1-Grundlagen-3081443.html]]
* Teil 2, **Server-Programmierung** (Praktischer Auftrieb für SSL):\\ [[http://www.heise.de/developer/artikel/SSL-TLS-Netzwerkprogrammierung-mit-Boost-Asio-Teil-2-Server-Programmierung-3102667.html]]
* Teil 3, **Client-Programmierung und Fehlerbehandlung** (Portabler Auftrieb):\\ [[http://www.heise.de/developer/artikel/SSL-TLS-Netzwerkprogrammierung-mit-Boost-Asio-Teil-3-Client-Programmierung-und-Fehlerbehandlung-3161904.html]]
==== Netzwerk ====
**cURL** (Client for URLs): [[https://de.wikipedia.org/wiki/CURL]] - ein Kommandozeilen-Programm zum Übertragen von Dateien in Netzwerken.\\ (cURL bzw. **libcurl** kann auch als Ersatz bzw. Nachfolger für **libwww** betrachtet werden.)
* **curl** - command line tool and library: [[https://curl.haxx.se/]]
* **libcurl** - the multiprotocol file transfer library: [[https://curl.haxx.se/libcurl/]]
* libcurl - small example snippets: [[https://curl.haxx.se/libcurl/c/example.html]]
* libcurl - programming tutorial: [[https://curl.haxx.se/libcurl/c/libcurl-tutorial.html]]
**libwww** (**Lib**rary **W**orld **W**ide **W**eb): [[https://en.wikipedia.org/wiki/Libwww]] - modulares client-seitiges Web-API für Unix und Windows.\\ (Sehr veraltet, letzter Release 12.2006.)
* Libwww Architecture: [[https://www.w3.org/Library/User/Architecture/Overview.html]]
* Libwww Ready to go Samples: [[https://www.w3.org/Library/Examples/]]
==== Threads ====
:!: Das Abarbeiten mehrerer Threads innerhalb eines Prozesses wurde mit dem **C++11**-Standard eingeführt.
[[EDV:PRG:C:Tipp:Client-Server mit Threads]] (:!: ToDo)
[[EDV:PRG:C:Tipp:Tips und Tricks zu Threads]] (FIXME)
Eine Einführung in die Programmierung von Threads unter Linux: [[http://www.ijon.de/comp/tutorials/threads/index.html]] von Michael Becker (2001)
:!: Beim Kompilieren (mit GCC) den Schalter "**-pthread**" nicht vergessen! Dieser Schalter aktiviert ein (oder mehrere?) Define (zumindest "**_GLIBCXX_HAS_GTHREADS**"), damit der Compiler in den Header-Files in passende Zweige hinein läuft.
Parallele Programmierung - PThread (POSIX-Threads), OpenMP (Open Multi Processing), MPI (Message Passing Interface):\\ [[https://pc2.uni-paderborn.de/fileadmin/pc2/media/staffweb/Jens_Simon/Courses/WS08_APR/ParalleleProgrammierung.pdf]]
Jürgen Wolf, **C von A bis Z** - Das umfassende Handbuch: Kapitel "26.4 Mit den POSIX-Threads programmieren"\\ [[http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/026_c_paralleles_rechnen_004.htm]]
:!: "Windows Threads vs pthreads" (meine Übersetzung aus [[https://stackoverflow.com/questions/5644912/posix-threads-vs-win32-threads]]):\\ Interface-mäßig unterscheiden sich die beiden Thread-Arten wenig. Sie könnte man fast 1:1 mappen. (Stichwort: "pthreads-win32".) Das wärs aber.\\ Die Posix-Threads sind alle Calls der Library "pthreads", die wiederum (auf Unix/Linux-Systemen) LowLevel-System-Calls tätigen. Die Win32-Threads sind System-Calls.
Ein sehr ausführlicher Artikel zum Thema (Stand: 31.03.2006):\\ [[https://www.uni-kassel.de/eecs/fileadmin/datas/fb16/Fachgebiete/PLM/Dokumente/Master_Bachelor_Diplom/tobias_gunkel_threading_systems.pdf]]
Synchronisation von Threads: [[https://www.grimm-jaud.de/index.php/blog/bedingungsvariablen-versus-tasks-zur-synchronisation-von-threads]]
C++ Keyword **thread_local** (ab C++11): [[https://en.cppreference.com/w/cpp/keyword/thread_local]]
Lesenswerte Artikel zum Thema aus dem Blog von Rainer Grimm auf Heise:
* 23.04.2018: [[https://www.heise.de/developer/artikel/C-Core-Guidelines-Regeln-zur-Concurrency-und-zur-Parallelitaet-4029126.html|Regeln zur Concurrency und zur Parallelität]]
* 30.04.2018: [[https://www.heise.de/developer/artikel/C-Core-Guidelines-Mehr-Regeln-zur-Concurrency-und-zur-Parallelitaet-4037436.html|Mehr Regeln zur Concurrency und zur Parallelität]]
* 14.05.2018: [[https://www.heise.de/developer/artikel/C-Core-Guidelines-Teilen-von-Daten-zwischen-Threads-4047784.html|Teilen von Daten zwischen Threads]]
* 21.05.2018: [[https://www.heise.de/developer/artikel/C-Core-Guidelines-Sich-um-Kinder-Threads-kuemmern-4052631.html|Sich um Kinder-Threads kümmern]]
* 28.05.2018: [[https://www.heise.de/developer/artikel/C-Core-Guidelines-Mehr-Fallen-in-der-Concurrency-4058357.html|Mehr Fallen in der Concurrency]]
* 04.06.2018: [[https://www.heise.de/developer/artikel/C-Core-Guidelines-Sei-dir-der-Fallen-von-Bedingungsvariablen-bewusst-4063822.html|Sei dir der Fallen von Bedingungsvariablen bewusst]]
* 25.06.2018: [[https://www.heise.de/developer/artikel/Concurrency-und-lock-freies-Programmieren-4090498.html|Concurrency und lock-freies Programmieren]]
==== Sonstiges ====
**JSON**-Parser: Library "jsoncpp" - [[https://github.com/open-source-parsers/jsoncpp]]
----
Stand: 09.04.2024
EOF