1" Vim syntax file
2" Language:	C
3" Maintainer:	Bram Moolenaar <Bram@vim.org>
4" Last Change:	2009 Nov 17
5
6" Quit when a (custom) syntax file was already loaded
7if exists("b:current_syntax")
8  finish
9endif
10
11" A bunch of useful C keywords
12syn keyword	cStatement	goto break return continue asm
13syn keyword	cLabel		case default
14syn keyword	cConditional	if else switch
15syn keyword	cRepeat		while for do
16
17syn keyword	cTodo		contained TODO FIXME XXX
18
19" It's easy to accidentally add a space after a backslash that was intended
20" for line continuation.  Some compilers allow it, which makes it
21" unpredicatable and should be avoided.
22syn match	cBadContinuation contained "\\\s\+$"
23
24" cCommentGroup allows adding matches for special things in comments
25syn cluster	cCommentGroup	contains=cTodo,cBadContinuation
26
27" String and Character constants
28" Highlight special characters (those which have a backslash) differently
29syn match	cSpecial	display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
30if !exists("c_no_utf")
31  syn match	cSpecial	display contained "\\\(u\x\{4}\|U\x\{8}\)"
32endif
33if exists("c_no_cformat")
34  syn region	cString		start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell
35  " cCppString: same as cString, but ends at end of line
36  syn region	cCppString	start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,@Spell
37else
38  if !exists("c_no_c99") " ISO C99
39    syn match	cFormat		display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlLjzt]\|ll\|hh\)\=\([aAbdiuoxXDOUfFeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
40  else
41    syn match	cFormat		display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bdiuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
42  endif
43  syn match	cFormat		display "%%" contained
44  syn region	cString		start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell
45  " cCppString: same as cString, but ends at end of line
46  syn region	cCppString	start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell
47endif
48
49syn match	cCharacter	"L\='[^\\]'"
50syn match	cCharacter	"L'[^']*'" contains=cSpecial
51if exists("c_gnu")
52  syn match	cSpecialError	"L\='\\[^'\"?\\abefnrtv]'"
53  syn match	cSpecialCharacter "L\='\\['\"?\\abefnrtv]'"
54else
55  syn match	cSpecialError	"L\='\\[^'\"?\\abfnrtv]'"
56  syn match	cSpecialCharacter "L\='\\['\"?\\abfnrtv]'"
57endif
58syn match	cSpecialCharacter display "L\='\\\o\{1,3}'"
59syn match	cSpecialCharacter display "'\\x\x\{1,2}'"
60syn match	cSpecialCharacter display "L'\\x\x\+'"
61
62"when wanted, highlight trailing white space
63if exists("c_space_errors")
64  if !exists("c_no_trail_space_error")
65    syn match	cSpaceError	display excludenl "\s\+$"
66  endif
67  if !exists("c_no_tab_space_error")
68    syn match	cSpaceError	display " \+\t"me=e-1
69  endif
70endif
71
72" This should be before cErrInParen to avoid problems with #define ({ xxx })
73if exists("c_curly_error")
74  syntax match cCurlyError "}"
75  syntax region	cBlock		start="{" end="}" contains=ALLBUT,cCurlyError,@cParenGroup,cErrInParen,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell fold
76else
77  syntax region	cBlock		start="{" end="}" transparent fold
78endif
79
80"catch errors caused by wrong parenthesis and brackets
81" also accept <% for {, %> for }, <: for [ and :> for ] (C99)
82" But avoid matching <::.
83syn cluster	cParenGroup	contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom
84if exists("c_no_curly_error")
85  syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
86  " cCppParen: same as cParen but ends at end-of-line; used in cDefine
87  syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
88  syn match	cParenError	display ")"
89  syn match	cErrInParen	display contained "^[{}]\|^<%\|^%>"
90elseif exists("c_no_bracket_error")
91  syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
92  " cCppParen: same as cParen but ends at end-of-line; used in cDefine
93  syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
94  syn match	cParenError	display ")"
95  syn match	cErrInParen	display contained "[{}]\|<%\|%>"
96else
97  syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell
98  " cCppParen: same as cParen but ends at end-of-line; used in cDefine
99  syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
100  syn match	cParenError	display "[\])]"
101  syn match	cErrInParen	display contained "[\]{}]\|<%\|%>"
102  syn region	cBracket	transparent start='\[\|<::\@!' end=']\|:>' contains=ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString,@Spell
103  " cCppBracket: same as cParen but ends at end-of-line; used in cDefine
104  syn region	cCppBracket	transparent start='\[\|<::\@!' skip='\\$' excludenl end=']\|:>' end='$' contained contains=ALLBUT,@cParenGroup,cErrInParen,cParen,cBracket,cString,@Spell
105  syn match	cErrInBracket	display contained "[);{}]\|<%\|%>"
106endif
107
108"integer number, or floating point number without a dot and with "f".
109syn case ignore
110syn match	cNumbers	display transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctalError,cOctal
111" Same, but without octal error (for comments)
112syn match	cNumbersCom	display contained transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctal
113syn match	cNumber		display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
114"hex number
115syn match	cNumber		display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
116" Flag the first zero of an octal number as something special
117syn match	cOctal		display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=cOctalZero
118syn match	cOctalZero	display contained "\<0"
119syn match	cFloat		display contained "\d\+f"
120"floating point number, with dot, optional exponent
121syn match	cFloat		display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
122"floating point number, starting with a dot, optional exponent
123syn match	cFloat		display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
124"floating point number, without dot, with exponent
125syn match	cFloat		display contained "\d\+e[-+]\=\d\+[fl]\=\>"
126if !exists("c_no_c99")
127  "hexadecimal floating point number, optional leading digits, with dot, with exponent
128  syn match	cFloat		display contained "0x\x*\.\x\+p[-+]\=\d\+[fl]\=\>"
129  "hexadecimal floating point number, with leading digits, optional dot, with exponent
130  syn match	cFloat		display contained "0x\x\+\.\=p[-+]\=\d\+[fl]\=\>"
131endif
132
133" flag an octal number with wrong digits
134syn match	cOctalError	display contained "0\o*[89]\d*"
135syn case match
136
137if exists("c_comment_strings")
138  " A comment can contain cString, cCharacter and cNumber.
139  " But a "*/" inside a cString in a cComment DOES end the comment!  So we
140  " need to use a special type of cString: cCommentString, which also ends on
141  " "*/", and sees a "*" at the start of the line as comment again.
142  " Unfortunately this doesn't very well work for // type of comments :-(
143  syntax match	cCommentSkip	contained "^\s*\*\($\|\s\+\)"
144  syntax region cCommentString	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=cSpecial,cCommentSkip
145  syntax region cComment2String	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=cSpecial
146  syntax region  cCommentL	start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cComment2String,cCharacter,cNumbersCom,cSpaceError,@Spell
147  if exists("c_no_comment_fold")
148    " Use "extend" here to have preprocessor lines not terminate halfway a
149    " comment.
150    syntax region cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell extend
151  else
152    syntax region cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell fold extend
153  endif
154else
155  syn region	cCommentL	start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cSpaceError,@Spell
156  if exists("c_no_comment_fold")
157    syn region	cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cSpaceError,@Spell extend
158  else
159    syn region	cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cSpaceError,@Spell fold extend
160  endif
161endif
162" keep a // comment separately, it terminates a preproc. conditional
163syntax match	cCommentError	display "\*/"
164syntax match	cCommentStartError display "/\*"me=e-1 contained
165
166syn keyword	cOperator	sizeof
167if exists("c_gnu")
168  syn keyword	cStatement	__asm__
169  syn keyword	cOperator	typeof __real__ __imag__
170endif
171syn keyword	cType		int long short char void
172syn keyword	cType		signed unsigned float double
173if !exists("c_no_ansi") || exists("c_ansi_typedefs")
174  syn keyword   cType		size_t ssize_t off_t wchar_t ptrdiff_t sig_atomic_t fpos_t
175  syn keyword   cType		clock_t time_t va_list jmp_buf FILE DIR div_t ldiv_t
176  syn keyword   cType		mbstate_t wctrans_t wint_t wctype_t
177endif
178if !exists("c_no_c99") " ISO C99
179  syn keyword	cType		bool complex
180  syn keyword	cType		int8_t int16_t int32_t int64_t
181  syn keyword	cType		uint8_t uint16_t uint32_t uint64_t
182  syn keyword	cType		int_least8_t int_least16_t int_least32_t int_least64_t
183  syn keyword	cType		uint_least8_t uint_least16_t uint_least32_t uint_least64_t
184  syn keyword	cType		int_fast8_t int_fast16_t int_fast32_t int_fast64_t
185  syn keyword	cType		uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
186  syn keyword	cType		intptr_t uintptr_t
187  syn keyword	cType		intmax_t uintmax_t
188endif
189if exists("c_gnu")
190  syn keyword	cType		__label__ __complex__ __volatile__
191endif
192
193syn keyword	cStructure	struct union enum typedef
194syn keyword	cStorageClass	static register auto volatile extern const
195if exists("c_gnu")
196  syn keyword	cStorageClass	inline __attribute__
197endif
198if !exists("c_no_c99")
199  syn keyword	cStorageClass	inline restrict
200endif
201
202if !exists("c_no_ansi") || exists("c_ansi_constants") || exists("c_gnu")
203  if exists("c_gnu")
204    syn keyword cConstant __GNUC__ __FUNCTION__ __PRETTY_FUNCTION__ __func__
205  endif
206  syn keyword cConstant __LINE__ __FILE__ __DATE__ __TIME__ __STDC__
207  syn keyword cConstant __STDC_VERSION__
208  syn keyword cConstant CHAR_BIT MB_LEN_MAX MB_CUR_MAX
209  syn keyword cConstant UCHAR_MAX UINT_MAX ULONG_MAX USHRT_MAX
210  syn keyword cConstant CHAR_MIN INT_MIN LONG_MIN SHRT_MIN
211  syn keyword cConstant CHAR_MAX INT_MAX LONG_MAX SHRT_MAX
212  syn keyword cConstant SCHAR_MIN SINT_MIN SLONG_MIN SSHRT_MIN
213  syn keyword cConstant SCHAR_MAX SINT_MAX SLONG_MAX SSHRT_MAX
214  if !exists("c_no_c99")
215    syn keyword cConstant __func__
216    syn keyword cConstant LLONG_MIN LLONG_MAX ULLONG_MAX
217    syn keyword cConstant INT8_MIN INT16_MIN INT32_MIN INT64_MIN
218    syn keyword cConstant INT8_MAX INT16_MAX INT32_MAX INT64_MAX
219    syn keyword cConstant UINT8_MAX UINT16_MAX UINT32_MAX UINT64_MAX
220    syn keyword cConstant INT_LEAST8_MIN INT_LEAST16_MIN INT_LEAST32_MIN INT_LEAST64_MIN
221    syn keyword cConstant INT_LEAST8_MAX INT_LEAST16_MAX INT_LEAST32_MAX INT_LEAST64_MAX
222    syn keyword cConstant UINT_LEAST8_MAX UINT_LEAST16_MAX UINT_LEAST32_MAX UINT_LEAST64_MAX
223    syn keyword cConstant INT_FAST8_MIN INT_FAST16_MIN INT_FAST32_MIN INT_FAST64_MIN
224    syn keyword cConstant INT_FAST8_MAX INT_FAST16_MAX INT_FAST32_MAX INT_FAST64_MAX
225    syn keyword cConstant UINT_FAST8_MAX UINT_FAST16_MAX UINT_FAST32_MAX UINT_FAST64_MAX
226    syn keyword cConstant INTPTR_MIN INTPTR_MAX UINTPTR_MAX
227    syn keyword cConstant INTMAX_MIN INTMAX_MAX UINTMAX_MAX
228    syn keyword cConstant PTRDIFF_MIN PTRDIFF_MAX SIG_ATOMIC_MIN SIG_ATOMIC_MAX
229    syn keyword cConstant SIZE_MAX WCHAR_MIN WCHAR_MAX WINT_MIN WINT_MAX
230  endif
231  syn keyword cConstant FLT_RADIX FLT_ROUNDS
232  syn keyword cConstant FLT_DIG FLT_MANT_DIG FLT_EPSILON
233  syn keyword cConstant DBL_DIG DBL_MANT_DIG DBL_EPSILON
234  syn keyword cConstant LDBL_DIG LDBL_MANT_DIG LDBL_EPSILON
235  syn keyword cConstant FLT_MIN FLT_MAX FLT_MIN_EXP FLT_MAX_EXP
236  syn keyword cConstant FLT_MIN_10_EXP FLT_MAX_10_EXP
237  syn keyword cConstant DBL_MIN DBL_MAX DBL_MIN_EXP DBL_MAX_EXP
238  syn keyword cConstant DBL_MIN_10_EXP DBL_MAX_10_EXP
239  syn keyword cConstant LDBL_MIN LDBL_MAX LDBL_MIN_EXP LDBL_MAX_EXP
240  syn keyword cConstant LDBL_MIN_10_EXP LDBL_MAX_10_EXP
241  syn keyword cConstant HUGE_VAL CLOCKS_PER_SEC NULL
242  syn keyword cConstant LC_ALL LC_COLLATE LC_CTYPE LC_MONETARY
243  syn keyword cConstant LC_NUMERIC LC_TIME
244  syn keyword cConstant SIG_DFL SIG_ERR SIG_IGN
245  syn keyword cConstant SIGABRT SIGFPE SIGILL SIGHUP SIGINT SIGSEGV SIGTERM
246  " Add POSIX signals as well...
247  syn keyword cConstant SIGABRT SIGALRM SIGCHLD SIGCONT SIGFPE SIGHUP
248  syn keyword cConstant SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT SIGSEGV
249  syn keyword cConstant SIGSTOP SIGTERM SIGTRAP SIGTSTP SIGTTIN SIGTTOU
250  syn keyword cConstant SIGUSR1 SIGUSR2
251  syn keyword cConstant _IOFBF _IOLBF _IONBF BUFSIZ EOF WEOF
252  syn keyword cConstant FOPEN_MAX FILENAME_MAX L_tmpnam
253  syn keyword cConstant SEEK_CUR SEEK_END SEEK_SET
254  syn keyword cConstant TMP_MAX stderr stdin stdout
255  syn keyword cConstant EXIT_FAILURE EXIT_SUCCESS RAND_MAX
256  " Add POSIX errors as well
257  syn keyword cConstant E2BIG EACCES EAGAIN EBADF EBADMSG EBUSY
258  syn keyword cConstant ECANCELED ECHILD EDEADLK EDOM EEXIST EFAULT
259  syn keyword cConstant EFBIG EILSEQ EINPROGRESS EINTR EINVAL EIO EISDIR
260  syn keyword cConstant EMFILE EMLINK EMSGSIZE ENAMETOOLONG ENFILE ENODEV
261  syn keyword cConstant ENOENT ENOEXEC ENOLCK ENOMEM ENOSPC ENOSYS
262  syn keyword cConstant ENOTDIR ENOTEMPTY ENOTSUP ENOTTY ENXIO EPERM
263  syn keyword cConstant EPIPE ERANGE EROFS ESPIPE ESRCH ETIMEDOUT EXDEV
264  " math.h
265  syn keyword cConstant M_E M_LOG2E M_LOG10E M_LN2 M_LN10 M_PI M_PI_2 M_PI_4
266  syn keyword cConstant M_1_PI M_2_PI M_2_SQRTPI M_SQRT2 M_SQRT1_2
267endif
268if !exists("c_no_c99") " ISO C99
269  syn keyword cConstant true false
270endif
271
272" Accept %: for # (C99)
273syn region      cPreCondit      start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$"  keepend contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError
274syn match	cPreCondit	display "^\s*\(%:\|#\)\s*\(else\|endif\)\>"
275if !exists("c_no_if0")
276  if !exists("c_no_if0_fold")
277    syn region	cCppOut		start="^\s*\(%:\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=cCppOut2 fold
278  else
279    syn region	cCppOut		start="^\s*\(%:\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=cCppOut2
280  endif
281  syn region	cCppOut2	contained start="0" end="^\s*\(%:\|#\)\s*\(endif\>\|else\>\|elif\>\)" contains=cSpaceError,cCppSkip
282  syn region	cCppSkip	contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppSkip
283endif
284syn region	cIncluded	display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
285syn match	cIncluded	display contained "<[^>]*>"
286syn match	cInclude	display "^\s*\(%:\|#\)\s*include\>\s*["<]" contains=cIncluded
287"syn match cLineSkip	"\\$"
288syn cluster	cPreProcGroup	contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket,cMulti
289syn region	cDefine		start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
290syn region	cPreProc	start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
291
292" Highlight User Labels
293syn cluster	cMultiGroup	contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString
294syn region	cMulti		transparent start='?' skip='::' end=':' contains=ALLBUT,@cMultiGroup,@Spell
295" Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
296syn cluster	cLabelGroup	contains=cUserLabel
297syn match	cUserCont	display "^\s*\I\i*\s*:$" contains=@cLabelGroup
298syn match	cUserCont	display ";\s*\I\i*\s*:$" contains=@cLabelGroup
299syn match	cUserCont	display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup
300syn match	cUserCont	display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup
301
302syn match	cUserLabel	display "\I\i*" contained
303
304" Avoid recognizing most bitfields as labels
305syn match	cBitField	display "^\s*\I\i*\s*:\s*[1-9]"me=e-1 contains=cType
306syn match	cBitField	display ";\s*\I\i*\s*:\s*[1-9]"me=e-1 contains=cType
307
308if exists("c_minlines")
309  let b:c_minlines = c_minlines
310else
311  if !exists("c_no_if0")
312    let b:c_minlines = 50	" #if 0 constructs can be long
313  else
314    let b:c_minlines = 15	" mostly for () constructs
315  endif
316endif
317if exists("c_curly_error")
318  syn sync fromstart
319else
320  exec "syn sync ccomment cComment minlines=" . b:c_minlines
321endif
322
323" Define the default highlighting.
324" Only used when an item doesn't have highlighting yet
325hi def link cFormat		cSpecial
326hi def link cCppString		cString
327hi def link cCommentL		cComment
328hi def link cCommentStart	cComment
329hi def link cLabel		Label
330hi def link cUserLabel		Label
331hi def link cConditional	Conditional
332hi def link cRepeat		Repeat
333hi def link cCharacter		Character
334hi def link cSpecialCharacter	cSpecial
335hi def link cNumber		Number
336hi def link cOctal		Number
337hi def link cOctalZero		PreProc	 " link this to Error if you want
338hi def link cFloat		Float
339hi def link cOctalError		cError
340hi def link cParenError		cError
341hi def link cErrInParen		cError
342hi def link cErrInBracket	cError
343hi def link cCommentError	cError
344hi def link cCommentStartError	cError
345hi def link cSpaceError		cError
346hi def link cSpecialError	cError
347hi def link cCurlyError		cError
348hi def link cOperator		Operator
349hi def link cStructure		Structure
350hi def link cStorageClass	StorageClass
351hi def link cInclude		Include
352hi def link cPreProc		PreProc
353hi def link cDefine		Macro
354hi def link cIncluded		cString
355hi def link cError		Error
356hi def link cStatement		Statement
357hi def link cPreCondit		PreCondit
358hi def link cType		Type
359hi def link cConstant		Constant
360hi def link cCommentString	cString
361hi def link cComment2String	cString
362hi def link cCommentSkip	cComment
363hi def link cString		String
364hi def link cComment		Comment
365hi def link cSpecial		SpecialChar
366hi def link cTodo		Todo
367hi def link cBadContinuation	Error
368hi def link cCppSkip		cCppOut
369hi def link cCppOut2		cCppOut
370hi def link cCppOut		Comment
371
372let b:current_syntax = "c"
373
374" vim: ts=8
375