Einige allgemeine Infos zu den Sprachen C/C++ und deren Authoren:
.
Infos zum Kompilieren/Linken sind unter GCC, Make (für die GNU Compiler Collection) und MS Visual Studio (für den Microsoft Compiler) zu finden.
Compatibility of C and C++: https://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
Siehe auch Empfohlene Parameter (von "ubuntuusers.de").
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 unterhttps://de.wikipedia.org/wiki/Statische_Code-Analyse):
Dynamische Code-Analyse (Info unterhttps://de.wikipedia.org/wiki/Dynamisches_Software-Testverfahren):
64-Bit-Architektur - Datenmodelle (LLP64/LP64/ILP64/SILP64), Bit-Breite von Integer-Datentypen
ELF - Executable and Linking Format (Unix)
DLLs / dynamische Libraries / DSOs / shared libraries
Sanitizer (deutsch "Desinfektionsmittel"): https://github.com/google/sanitizers - AddressSanitizer, MemorySanitizer, ThreadSanitizer, LeakSanitizer.
Vordefinierte Präprozessor-Direktiven (ANSI C), Makros (Predefined Macros) und String-Literal-Operator
Big-Endian und Little-Endian, Unbedingt beachten: Plattformübergreifende Darstellung von Zahlen (insbesondere bei der seriellen Übertragung)
Makros-Kollisionen vermeiden
Plattform-Makros für Plattform- und Compilerübergreifende Programme (Stichwort: Portabilität) ()
Einbetten von Versionsinformationen ()
Signale (nur UNIX/Linux)
Dynamische Speicherverwaltung - malloc(), calloc(), realloc(), free(), alloca(); Hinweise für Portierung von 32- auf 64-Bit (32-/64-Bit Pointer).
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. ()
errno - Es gibt einiges zu beachten!
Zeit-Funktionen - time(), localtime(), localtime_s(), localtime_r(), clock(), clock_gettime(), TZ, etc. und weitere Beispiele ()
Funktionen mit variabler Anzahl von Parameter ()
Vorsicht bei Verwendung von putenv() - es kann zu memory leaks führen! Stattdessen die 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
Kurzanleitung für Debugger DDD / KDbg
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.
Sichere Programmierung - Hier findet man ebenfalls einige nützliche Hinweise.
Extern linkage und C language linkage
Das Schlüsselwort 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.
Datentype für Zeichen und Strings - char, wchar_t, char16_t, char32_t, u16string, u32string
printf() - Formatierungszeichen (Formatzeichen, Steuerzeichen, Escape-Sequenzen)
Definition von neuen Datentypen (mit "typedef", "#define", Probleme bei anonymen Typen, etc.)
GMP - The GNU Multiple Precision Arithmetic Library: https://de.wikipedia.org/wiki/GNU_Multiple_Precision_Arithmetic_Library
C lernen - Einige Beispiele und Übungen. ()
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.
Zeitabstände messen bzw. Laufzeit eines Programms / einer Funktion berechnen
Kommunikation über Named Pipes
Textfile öffnen - mit Versuchszähler, Basisfunktion: fopen()
Textfile schließen/löschen - mit Versuchszähler
Aus mehreren Files blockweise lesen, Basisfunktion: fread()
logging_ext: Logging-Modul - nützliche Log-Funktionen ()
trim_ext: Trim-Modul - Funktionen um die Leerzeichen vorne und hinten bei einem String wegschneiden
Array of Messages: Alle Messages, die ein Programm ausgibt, an einer Stelle zusammen halten
Zweidimensionale dynamische Arrays
Vorlage C-Programm: Ein Gerüst für ein C-Programm
Debug-Makros - Einige nützliche Beispiele, die sich beim "Debuggen" als hilfreich erwiesen haben
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)
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
C++ Crashkurs - Einige Beispiele / Übungen.
static_assert() (C++11)
Auf der Kommandozeile übergebene Parameter parsen
Stringutils - Helper rund um die Strings (trim, trim_left, trim_right, pad_left, pad_right, to_upper, replace, compare_nocase, split, split_lines)
"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 Zuweisung eines Objekts an Static Member einer Klasse! (Relevant für den GNU-Compiler)
Vorsicht bei der Initialisierung eines Objekts bei dessen Deklaration! (Relevant für den GNU-Compiler)
Export von Klassen/Strukturen/Methoden/Funktionen, die STL-Objekte (oder Templates allgemein) als Member/Parameter verwenden (insbesondere für DLLs relevant)
Size of 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:
…und auf http://www.programmerinterview.com/:
Die xxxxxx_s()-Funktionen nachbauen - memcpy_s(), strcpy_s(), strncpy_s()
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 Wikipedia (englisch), 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)
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 (<assert.h>, <float.h>, <math.h>, <stdarg.h>, <stdlib.h>, <ctype.h>, <limits.h>, <setjmp.h>, <string.h>, <signal.h>, <stdio.h>, <time.h>)
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:
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://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):
Blog Modernes C++ von Rainer Grimm auf Heise: https://www.heise.de/developer/ModernesCplusplus-3691794.html
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)
Programmieren mit C++ Templates
Fehlerfreies Programmieren in C++ - Dynamische Allokation von Ressourcen
In der Klasse "std::string" fehlt die trim-Funktion. Im Thread 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 (Structured Exception Handling): https://msdn.microsoft.com/de-de/library/swezty51(v=vs.120).aspx
libstdc++ Source Documentation: https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/
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
Unicode in C and C++: What You Can Do About It Today (englisch) von : Alex Allain
Using Unicode in C/C++ (englisch) von : Evan Jones
Eine hilfreiche Tabelle mit Unicode-/UTF8-Zeichen: http://www.utf8-zeichentabelle.de/
Weitere Tabelle: http://www.isthisthingon.org/unicode/index.php
ADMIN-Tipp: 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.
MinGW:
Auf MSDN:
Oliver Müller auf "Heise Developer":
OpenSSL: Implementierung innerhalb eines Client- und Server-Programms (2010)
Oliver Müller auf "Heise Developer":
SSL/TLS-Netzwerkprogrammierung mit Boost.Asio (2016)
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.)
libwww (Library World Wide Web): https://en.wikipedia.org/wiki/Libwww - modulares client-seitiges Web-API für Unix und Windows.
(Sehr veraltet, letzter Release 12.2006.)
Das Abarbeiten mehrerer Threads innerhalb eines Prozesses wurde mit dem C++11-Standard eingeführt.
Client-Server mit Threads ( ToDo)
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:
JSON-Parser: Library "jsoncpp" - https://github.com/open-source-parsers/jsoncpp
Stand: 09.04.2024
EOF