C99 Definition
NULL Pointer
C Programming/stdint.h
inttypes.h – fixed size integer types
stdint.h – integer types
Include
| NULL | stddef.h | 
| size_t | stddef.h | 
| uint32_t | stdint.h | 
| stddef.h | NULL, size_t | 
| stdbool.h | bool, true, false | 
| stdint.h | uint32_t | 
| limits.h | INT_MIN, UINT_MAX | 
| inttypes.h | PRId32, PRIx32 | 
Varianten der Programmiersprache C
Präprozessor
Stop on Preprocessor
Can gcc output C code after preprocessing?
$ gcc -E test.c
Concatenation
struct command
{
  char *name;
  void (*function) (void);
};
#define COMMAND(NAME)  { #NAME, NAME ## _command }
struct command commands[] =
{
  COMMAND (quit),
  COMMAND (help),
  …
};
/* === RESULT === */
struct command commands[] =
{
  { "quit", quit_command },
  { "help", help_command },
  …
};
Variadic macro __VA_ARGS__
Variadic Macros
Variadic macro
#define MYLOG(FormatLiteral, ...)  \
        fprintf (stderr, "%s(%u): " FormatLiteral "\n", \
        __FILE__, __LINE__, __VA_ARGS__)
Structs
struct (C programming language)
Struct initialization
Designated Initializer
Designated Initializers
Why does C++11 not support designated initializer lists as C99?
/* Forward declare a type "point" to be a struct. */
typedef struct point point;
/* Declare the struct with integer members x, y */
struct point {
   int    x;
   int    y;
};
/* Define a variable p of type point, and
   initialize its first two members in place */
point p = {
    1,
    2
};
/* Define a variable p of type point, an
   set members using designated  initializers*/
point p = { 
    .y = 2,
    .x = 1
};