snippet     if
abbr        if () {}
    if (${1:#:condition}) {
        ${0:TARGET}
    }

snippet else
    else {
        ${0:TARGET}
    }

snippet elseif
    else if (${1:#:condition}) {
        ${0:TARGET}
    }

snippet     ifelse
abbr        if () {} else {}
    if (${1:#:condition}) {
        ${2:TARGET}
    } else {
        ${3}
    }

snippet     for
abbr        for () {}
    for (${1} = 0; $1 < ${2}; $1++) {
        ${0:TARGET}
    }

snippet     while
abbr        while () {}
    while (${1:#:condition}) {
        ${0:TARGET}
    }

snippet     do_while
alias       do
    do {
        ${0:TARGET:code}
    } while (${1:#:condition});

snippet     switch
abbr        switch () {}
    switch (${1:#:var}) {
        case ${2:#:val}:
            ${0:TARGET}
            break;
    }

snippet     function
alias       func
abbr        func() {}
    ${1:void} ${2:#:func_name}(${3:#:args}) {
        ${0:TARGET}
    }

snippet     struct
abbr        struct {}
    struct ${1:#:name} {
        ${0:TARGET:data}
    };

# Typedef struct
snippet struct_typedef
    typedef struct ${1:#:name} {
        ${0:TARGET:data}
    };

snippet     enum
abbr        enum {}
    enum ${1:#:name} {
        ${0:TARGET}
    };

# hard-tab is necessary; C indent doesn't support this.
snippet main
	int main(int argc, char const* argv[])
	{
		${0:TARGET}
		return 0;
	}

# #include <...>
snippet inc
alias   #inc, #include
    #include <${1:stdio}.h>${0}
# #include "..."
snippet inc2
alias   #inc2, #include2
    #include "${1}.h"${0}

snippet ifndef
alias   #ifndef
abbr #ifndef ... #define ... #endif
    #ifndef $1
    #define ${1:#:SYMBOL}
    #endif${0}

snippet def
alias   #def, #define
    #define 

# Include-Guard
snippet once
abbr include-guard
    #ifndef ${1:SYMBOL}
        #define $1

        ${0:TARGET}
    #endif /* end of include guard */

# Tertiary conditional
snippet conditional
    (${1:#:condition}) ? ${2:#:a} : ${3:#:b}

# Typedef
snippet typedef
    typedef ${1:#:base_type} ${2:#:custom_type};

snippet printf
abbr    printf("...\n", ...);
    printf("${1}\n", ${2});

snippet fprintf
abbr    fprintf(..., "...\n", ...);
    fprintf(${1:stderr}, "${2}\n"${3});

snippet comment
alias /*
    /* ${1:#:comment} */
    ${0}

snippet sizeof
alias size
    sizeof(${0:TARGET})

snippet helloworld
    #include <stdio.h>
    int main(int argc, char const* argv[])
    {
        puts("hello, world!");
        return 0;
    }