====== C ======
===== Typ einer Konstanten =====
Der Typ einer Integer-Konstanten wird anhand einer Liste bestimmt. Der Typ ist der erste aus der Liste, in dem der Wert der Konstante dargestellt werden kann. Diese Liste unterscheidet sich für die verschiedenen Versionen des Standards.
C90:
int, long int, unsigned long int
C99:
int, long int, long long int
Der Typ kann auch explizit mit den Suffixen ''u'' (unsigned) und ''l'' (long) bzw. ''ll'' (long long) gewählt werden.
===== Mehrere Defines logisch verknüpfen =====
Um mehrere ''define''-Anweisungen logisch mit UND und ODER zu verknüpfen muss man statt ''#ifdef'' die Langform ''#if defined'' verwenden:
#if defined DEFINE_1 || defined DEFINE_2
//do something
#endif
===== Einschränkungen von C gegenüber C++ =====
^Bemerkung ^C ^C++^
|keine Defaultparameter| void foo_a(int a){foo_ab(a, 42)};
void foo_ab(int a, int b)
|void foo(int a, int b=42)
|
|keine überladenen Funktionen| void foo_int(int);
void foo_char(char);
| void foo(int);
void foo(char);
|
|Arraylänge kann keine const Variable sein ((C99 und gnu90 unterstützen dies jedoch. Es werden dann VLA (variable length arrays) auf dem Stack angelegt.)) | #define length 12;
int matrix[length];
|const int length = 12;
int matrix[length];
|
===== Unterseiten =====
{{indexmenu>c}}
===== Links =====
* [[http://ewiki.e-dschungel.de/software/avr-gcc|Hinweise speziell zum AVR-GCC]]
* [[http://blog.regehr.org/archives/28|Nine ways to break your systems code using volatile]]
* [[http://www.github.com/abcminiuser/avr-tutorials/blob/master/ManagingLargeProjects/Output/ManagingLargeProjects.pdf?raw=true|C Code modularisieren]]
* [[http://www.geeksforgeeks.org/understanding-extern-keyword-in-c/|Understanding extern keyword in C]]
* [[http://graphics.stanford.edu/~seander/bithacks.html|Bit Twiddling]]
* [[http://cdecl.org/|Übersetzung von Array und Pointerschreibweise "C Gibberish <-> English"]]
* [[https://indi-project.org/docs/2016-ccs.pdf|Twice the Bits, Twice the Trouble:
Vulnerabilities Induced by Migrating to 64-Bit Platforms]]
* [[https://godbolt.org/|Compiler-Explorer]]
* [[https://developers.redhat.com/blog/2014/10/16/gcc-undefined-behavior-sanitizer-ubsan/|GCC Undefined Behavior Sanitizer – ubsan]]
==== Signed/Unsigned ====
* [[http://www.soundsoftware.ac.uk/c-pitfall-unsigned|Pitfalls in C and C++: Unsigned types]]
* [[http://embeddedgurus.com/stack-overflow/2009/08/a-tutorial-on-signed-and-unsigned-integers/|A tutorial on signed and unsigned integers]]
* [[https://stackoverflow.com/questions/18195715/why-is-unsigned-integer-overflow-defined-behavior-but-signed-integer-overflow-is/18195756#18195756|Why is unsigned integer overflow defined behavior but signed on integer overflow isn't]]
* [[https://www.airs.com/blog/archives/120|Signed Overflow (Airs – Ian Lance Taylor)]]
==== X-Macros ====
* [[http://www.drdobbs.com/cpp/the-x-macro/228700289|The New C: X Macros]]
* Reduce C language coding errors with X macros
* [[http://www.embedded.com/design/programming-languages-and-tools/4403953/C-language-coding-errors-with-X-macros-Part-1|Teil 1]]
* [[http://www.embedded.com/design/programming-languages-and-tools/4405283/Reduce-C--language-coding-errors-with-X-macros---Part-2|Teil 2]]
* [[http://www.embedded.com/design/programming-languages-and-tools/4408127/2/Reduce-C-language-coding-errors-with-X-macros--Part-3|Teil 3]]
* [[https://blog.brush.co.nz/2009/08/xmacros/|Code generation with X-Macros in C]]