summaryrefslogtreecommitdiff
path: root/snippets/c.snippets
diff options
context:
space:
mode:
authorVito G. Graffagnino <vito@graffagnino.xyz>2022-08-28 12:24:01 +0100
committerVito G. Graffagnino <vito@graffagnino.xyz>2022-08-28 12:24:01 +0100
commit823302458ec6c53455a3f34674415c43ce6a3187 (patch)
tree92168b44b01f5b2236b7cdf331e227c4790431ee /snippets/c.snippets
parent9ea6111717518625cbd28a020493ec06610ff01e (diff)
Added snippets directory
Diffstat (limited to 'snippets/c.snippets')
-rw-r--r--snippets/c.snippets392
1 files changed, 392 insertions, 0 deletions
diff --git a/snippets/c.snippets b/snippets/c.snippets
new file mode 100644
index 0000000..2efb625
--- /dev/null
+++ b/snippets/c.snippets
@@ -0,0 +1,392 @@
+## Main
+# main
+snippet main
+ int main(int argc, char *argv[])
+ {
+ ${0}
+ return 0;
+ }
+# main(void)
+snippet mainn
+ int main(void)
+ {
+ ${0}
+ return 0;
+ }
+##
+## Preprocessor
+# #include <...>
+snippet inc
+ #include <${1:stdio}.h>
+ $0
+# #include "..."
+snippet Inc
+ #include "${1:`vim_snippets#Filename("$1.h")`}"
+ $0
+# ifndef...define...endif
+snippet ndef
+ #ifndef $1
+ #define ${1:SYMBOL} ${2:value}
+ #endif /* ifndef $1 */
+# define
+snippet def
+ #define
+# ifdef...endif
+snippet ifdef
+ #ifdef ${1:FOO}
+ ${2:#define }
+ #endif
+# if
+snippet #if
+ #if ${1:FOO}
+ ${0:${VISUAL}}
+ #endif
+# header include guard
+snippet once
+ #ifndef ${1:`toupper(vim_snippets#Filename('$1_H', 'UNTITLED_H'))`}
+
+ #define $1
+
+ ${0}
+
+ #endif /* end of include guard: $1 */
+# Disable C++ name mangling in C headers
+snippet nocxx
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+
+ ${0}
+
+ #ifdef __cplusplus
+ } /* extern "C" */
+ #endif
+##
+## Control Statements
+# if
+snippet if
+ if (${1:true}) {
+ ${0:${VISUAL}}
+ }
+snippet ife
+ if (${1:true}) {
+ ${2:${VISUAL}}
+ } else {
+ ${0}
+ }
+# else
+snippet el
+ else {
+ ${0:${VISUAL}}
+ }
+# else if
+snippet elif
+ else if (${1:true}) {
+ ${0:${VISUAL}}
+ }
+# ifi
+snippet ifi
+ if (${1:true}) ${0};
+# ternary
+snippet t
+ ${1:/* condition */} ? ${2:a} : ${3:b}
+# switch
+snippet switch
+ switch (${1:/* variable */}) {
+ case ${2:/* variable case */}:
+ ${3}
+ ${4:break;}${5}
+ default:
+ ${6}
+ }
+# switch without default
+snippet switchndef
+ switch (${1:/* variable */}) {
+ case ${2:/* variable case */}:
+ ${3}
+ ${4:break;}${5}
+ }
+# case
+snippet case
+ case ${1:/* variable case */}:
+ ${2}
+ ${3:break;}
+snippet ret
+ return ${0};
+snippet ex
+ exit($0);
+##
+## Loops
+# for
+snippet for
+ for (int ${2:i} = 0; $2 < ${1:count}; $2${3:++}) {
+ ${4}
+ }
+# for (custom)
+snippet forr
+ for (int ${1:i} = ${2:0}; ${3:$1 < 10}; $1${4:++}) {
+ ${5}
+ }
+# while
+snippet wh
+ while (${1:/* condition */}) {
+ ${0:${VISUAL}}
+ }
+# do... while
+snippet do
+ do {
+ ${0:${VISUAL}}
+ } while (${1:/* condition */});
+##
+## Functions
+# function definition
+snippet fun
+ ${1:void} ${2:function_name}(${3})
+ {
+ ${4}
+ }
+# function definition with zero parameters
+snippet fun0
+ ${1:void} ${2:function_name}()
+ {
+ ${3}
+ }
+# function definition with Doxygen documentation
+snippet dfun0
+ /*! \brief ${1:Brief function description here}
+ *
+ * ${2:Detailed description of the function}
+ *
+ * \return ${3:Return parameter description}
+ */
+ ${4:void} ${5:function_name}()
+ {
+ ${6}
+ }
+# function definition with one parameter
+snippet fun1
+ ${1:void} ${2:function_name}(${3:Type} ${4:Parameter})
+ {
+ ${5}
+ }
+# function definition with one parameter with Doxygen documentation
+snippet dfun1
+ /*! \brief ${1:Brief function description here}
+ *
+ * ${2:Detailed description of the function}
+ *
+ * \param $3 ${4:Parameter description}
+ * \return ${5:Return parameter description}
+ */
+ ${6:void} ${7:function_name}(${8:Type} ${3:Parameter})
+ {
+ ${9}
+ }
+# function definition with two parameters
+snippet fun2
+ ${1:void} ${2:function_name}(${3:Type} ${4:Parameter}, ${5:Type} ${6:Parameter})
+ {
+ ${7}
+ }
+# function definition with two parameters with Doxygen documentation
+snippet dfun2
+ /*! \brief ${1:Brief function description here}
+ *
+ * ${2:Detailed description of the function}
+ *
+ * \param $3 ${4:Parameter description}
+ * \param $5 ${6:Parameter description}
+ * \return ${7:Return parameter description}
+ */
+ ${8:void} ${9:function_name}(${10:Type} ${3:Parameter}, ${11:Type} ${5:Parameter})
+ {
+ ${12}
+ }
+# function definition with three parameters
+snippet fun3
+ ${1:void} ${2:function_name}(${3:Type} ${4:Parameter}, ${5:Type} ${6:Parameter}, ${7:Type} ${8:Parameter})
+ {
+ ${9}
+ }
+# function definition with three parameters with Doxygen documentation
+snippet dfun3
+ /*! \brief ${1:Brief function description here}
+ *
+ * ${2:Detailed description of the function}
+ *
+ * \param $3 ${4:Parameter description}
+ * \param $5 ${6:Parameter description}
+ * \param $7 ${8:Parameter description}
+ * \return ${9:Return parameter description}
+ */
+ ${10:void} ${11:function_name}(${12:Type} ${3:Parameter}, ${13:Type} ${5:Parameter}, ${14:Type} ${7:Parameter})
+ {
+ ${15}
+ }
+# function declaration
+snippet fund
+ ${1:void} ${2:function_name}(${3});
+##
+## Types
+# typedef
+snippet td
+ typedef ${1:int} ${2:MyCustomType};
+# struct
+snippet st
+ /*! \struct $1
+ * \brief ${3:Brief struct description}
+ *
+ * ${4:Detailed description}
+ */
+ struct ${1:`vim_snippets#Filename('$1_t', 'name')`} {
+ ${2:Data} /*!< ${4:Description} */
+ }${5: /* optional variable list */};
+# typedef struct
+snippet tds
+ /*! \struct $2
+ * \brief ${5:Brief struct description}
+ *
+ * ${6:Detailed description}
+ */
+ typedef struct ${2:_$1 }{
+ m_${3:Data} /*!< ${4:Description} */
+ } ${1:`vim_snippets#Filename('$1_t', 'name')`};
+
+snippet enum
+ /*! \enum $1
+ *
+ * ${2:Detailed description}
+ */
+ enum ${1:name} { ${0} };
+# typedef enum
+snippet tde
+ /*! \enum $2
+ *
+ * ${4:Detailed description}
+ */
+ typedef enum {
+ ${1:Data} /*!< ${3:Description} */
+ } ${2:foo};
+##
+## Input/Output
+# printf
+snippet pr
+ printf("${1:%s}\n"${2});
+# fprintf (again, this isn't as nice as TextMate's version, but it works)
+snippet fpr
+ fprintf(${1:stderr}, "${2:%s}\n"${3});
+snippet prd
+ printf("${1:} = %d\n", $1);
+snippet prf
+ printf("${1:} = %f\n", $1);
+snippet prx
+ printf("${1:} = %${2}\n", $1);
+snippet warn
+ warn("${1:%s}"$0);
+snippet warnx
+ warnx("${1:%s}"$0);
+snippet err
+ err(${1:1}, "${2:%s}"$0);
+snippet errx
+ errx(${1:1}, "${2:%s}"$0);
+# getopt
+snippet getopt
+ int choice;
+ while (1)
+ {
+ static struct option long_options[] =
+ {
+ /* Use flags like so:
+ {"verbose", no_argument, &verbose_flag, 'V'}*/
+ /* Argument styles: no_argument, required_argument, optional_argument */
+ {"version", no_argument, 0, 'v'},
+ {"help", no_argument, 0, 'h'},
+ ${1}
+ {0,0,0,0}
+ };
+
+ int option_index = 0;
+
+ /* Argument parameters:
+ no_argument: " "
+ required_argument: ":"
+ optional_argument: "::" */
+
+ choice = getopt_long( argc, argv, "vh",
+ long_options, &option_index);
+
+ if (choice == -1)
+ break;
+
+ switch( choice )
+ {
+ case 'v':
+ ${2}
+ break;
+
+ case 'h':
+ ${3}
+ break;
+
+ case '?':
+ /* getopt_long will have already printed an error */
+ break;
+
+ default:
+ /* Not sure how to get here... */
+ return EXIT_FAILURE;
+ }
+ }
+
+ /* Deal with non-option arguments here */
+ if ( optind < argc )
+ {
+ while ( optind < argc )
+ {
+ ${0}
+ }
+ }
+
+## Assertions
+snippet asr
+ assert(${1:condition});
+
+snippet anl
+ assert(${1:ptr} != NULL);
+
+## Dynamic Allocation
+snippet mlc
+ ${1:ptr} = (${2:type}*) malloc(sizeof($2));
+
+snippet clc
+ ${1:ptr} = (${2:type}*) calloc(${3:size}, sizeof($2));
+
+snippet rlc
+ ${1:ptr} = realloc($1, ${2:size} * sizeof(${3:type}));
+
+snippet mlcd
+ ${1:type} ${2:ptr} = ($1*) malloc(sizeof($1));
+
+snippet clcd
+ ${1:type} ${2:ptr} = ($1*) calloc(${3:size}, sizeof($1));
+
+snippet fre
+ free(${1:ptr});
+
+##
+# TODO section
+snippet todo
+ /*! TODO: ${1:Todo description here}
+ * \todo $1
+ */
+## Miscellaneous
+# This is kind of convenient
+snippet .
+ [${1}]
+
+snippet asm
+ __asm__ __volatile__(
+ "${0}\n\t"
+ :
+ :
+ );