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