diff --git a/src/cmdexpand.c b/src/cmdexpand.c
index 1f4791a..4f12625 100644
--- a/src/cmdexpand.c
+++ b/src/cmdexpand.c
@@ -2756,7 +2756,7 @@
     return NULL;
 }
 
-# ifdef FEAT_EVAL
+#ifdef FEAT_EVAL
 /*
  * Function given to ExpandGeneric() to obtain the possible arguments of the
  * ":breakadd {expr, file, func, here}" command.
@@ -3020,10 +3020,10 @@
 	char *directories[] = {"syntax", "indent", "ftplugin", NULL};
 	return ExpandRTDir(pat, 0, numMatches, matches, directories);
     }
-# if defined(FEAT_EVAL)
+#if defined(FEAT_EVAL)
     if (xp->xp_context == EXPAND_USER_LIST)
 	return ExpandUserList(xp, matches, numMatches);
-# endif
+#endif
     if (xp->xp_context == EXPAND_PACKADD)
 	return ExpandPackAddDir(pat, numMatches, matches);
 
@@ -3057,10 +3057,10 @@
 	ret = ExpandSettings(xp, &regmatch, pat, numMatches, matches, fuzzy);
     else if (xp->xp_context == EXPAND_MAPPINGS)
 	ret = ExpandMappings(pat, &regmatch, numMatches, matches);
-# if defined(FEAT_EVAL)
+#if defined(FEAT_EVAL)
     else if (xp->xp_context == EXPAND_USER_DEFINED)
 	ret = ExpandUserDefined(pat, xp, &regmatch, matches, numMatches);
-# endif
+#endif
     else
 	ret = ExpandOther(pat, xp, &regmatch, matches, numMatches);
 
@@ -3168,7 +3168,7 @@
 	else
 	    ((char_u **)ga.ga_data)[ga.ga_len] = str;
 
-# ifdef FEAT_MENU
+#ifdef FEAT_MENU
 	if (func == get_menu_names)
 	{
 	    // test for separator added by get_menu_names()
@@ -3176,7 +3176,7 @@
 	    if (*str == '\001')
 		*str = '.';
 	}
-# endif
+#endif
 
 	++ga.ga_len;
     }
@@ -3350,11 +3350,11 @@
     hash_init(&found_ht);
     for (s = path; ; s = e)
     {
-# if defined(MSWIN)
+#if defined(MSWIN)
 	e = vim_strchr(s, ';');
-# else
+#else
 	e = vim_strchr(s, ':');
-# endif
+#endif
 	if (e == NULL)
 	    e = s + STRLEN(s);
 
@@ -3396,7 +3396,7 @@
     return OK;
 }
 
-# if defined(FEAT_EVAL)
+#if defined(FEAT_EVAL)
 /*
  * Call "user_expand_func()" to invoke a user defined Vim script function and
  * return the result (either a string, a List or NULL).
@@ -3580,7 +3580,7 @@
     *numMatches = ga.ga_len;
     return OK;
 }
-# endif
+#endif
 
 /*
  * Expand "file" for all comma-separated directories in "path".
@@ -3613,14 +3613,14 @@
 	copy_option_part(&path, buf, MAXPATHL, ",");
 	if (STRLEN(buf) + STRLEN(file) + 2 < MAXPATHL)
 	{
-# if defined(MSWIN)
+#if defined(MSWIN)
 	    // Using the platform's path separator (\) makes vim incorrectly
 	    // treat it as an escape character, use '/' instead.
 	    if (*buf != NUL && !after_pathsep(buf, buf + STRLEN(buf)))
 		STRCAT(buf, "/");
-# else
+#else
 	    add_pathsep(buf);
-# endif
+#endif
 	    STRCAT(buf, file);
 	    if (ExpandFromContext(&xpc, buf, &p, &num_p,
 			     WILD_SILENT|expand_options) != FAIL && num_p > 0)
@@ -3828,10 +3828,10 @@
 	    if (has_mbyte)
 		j -= (*mb_head_off)(cclp->cmdbuff, cclp->cmdbuff + j);
 	    if (vim_ispathsep(cclp->cmdbuff[j])
-# ifdef BACKSLASH_IN_FILENAME
+#ifdef BACKSLASH_IN_FILENAME
 		    && vim_strchr((char_u *)" *?[{`$%#",
 			cclp->cmdbuff[j + 1]) == NULL
-# endif
+#endif
 	       )
 	    {
 		if (found)
