diff --git a/src/hashtab.c b/src/hashtab.c
index a4bce65..d1ba2c9 100644
--- a/src/hashtab.c
+++ b/src/hashtab.c
@@ -49,7 +49,7 @@
  * Returns NULL when out of memory.
  */
     hashtab_T *
-hash_create()
+hash_create(void)
 {
     hashtab_T *ht;
 
@@ -64,8 +64,7 @@
  * Initialize an empty hash table.
  */
     void
-hash_init(ht)
-    hashtab_T *ht;
+hash_init(hashtab_T *ht)
 {
     /* This zeroes all "ht_" entries and all the "hi_key" in "ht_smallarray". */
     vim_memset(ht, 0, sizeof(hashtab_T));
@@ -78,8 +77,7 @@
  * If "ht" is not freed then you should call hash_init() next!
  */
     void
-hash_clear(ht)
-    hashtab_T *ht;
+hash_clear(hashtab_T *ht)
 {
     if (ht->ht_array != ht->ht_smallarray)
 	vim_free(ht->ht_array);
@@ -91,9 +89,7 @@
  * memory to the location of the key (it's always positive).
  */
     void
-hash_clear_all(ht, off)
-    hashtab_T	*ht;
-    int		off;
+hash_clear_all(hashtab_T *ht, int off)
 {
     long	todo;
     hashitem_T	*hi;
@@ -119,9 +115,7 @@
  * (adding, setting or removing an item)!
  */
     hashitem_T *
-hash_find(ht, key)
-    hashtab_T	*ht;
-    char_u	*key;
+hash_find(hashtab_T *ht, char_u *key)
 {
     return hash_lookup(ht, key, hash_hash(key));
 }
@@ -130,10 +124,7 @@
  * Like hash_find(), but caller computes "hash".
  */
     hashitem_T *
-hash_lookup(ht, key, hash)
-    hashtab_T	*ht;
-    char_u	*key;
-    hash_T	hash;
+hash_lookup(hashtab_T *ht, char_u *key, hash_T hash)
 {
     hash_T	perturb;
     hashitem_T	*freeitem;
@@ -195,7 +186,7 @@
  * Called when exiting.
  */
     void
-hash_debug_results()
+hash_debug_results(void)
 {
 #ifdef HT_DEBUG
     fprintf(stderr, "\r\n\r\n\r\n\r\n");
@@ -211,9 +202,7 @@
  * Returns FAIL when out of memory or the key is already present.
  */
     int
-hash_add(ht, key)
-    hashtab_T	*ht;
-    char_u	*key;
+hash_add(hashtab_T *ht, char_u *key)
 {
     hash_T	hash = hash_hash(key);
     hashitem_T	*hi;
@@ -234,11 +223,11 @@
  * Returns OK or FAIL (out of memory).
  */
     int
-hash_add_item(ht, hi, key, hash)
-    hashtab_T	*ht;
-    hashitem_T	*hi;
-    char_u	*key;
-    hash_T	hash;
+hash_add_item(
+    hashtab_T	*ht,
+    hashitem_T	*hi,
+    char_u	*key,
+    hash_T	hash)
 {
     /* If resizing failed before and it fails again we can't add an item. */
     if (ht->ht_error && hash_may_resize(ht, 0) == FAIL)
@@ -265,9 +254,7 @@
  * "hi" is invalid after this!
  */
     void
-hash_set(hi, key)
-    hashitem_T	*hi;
-    char_u	*key;
+hash_set(hashitem_T *hi, char_u *key)
 {
     hi->hi_key = key;
 }
@@ -279,9 +266,7 @@
  * The caller must take care of freeing the item itself.
  */
     void
-hash_remove(ht, hi)
-    hashtab_T	*ht;
-    hashitem_T	*hi;
+hash_remove(hashtab_T *ht, hashitem_T *hi)
 {
     --ht->ht_used;
     hi->hi_key = HI_KEY_REMOVED;
@@ -294,8 +279,7 @@
  * Must call hash_unlock() later.
  */
     void
-hash_lock(ht)
-    hashtab_T	*ht;
+hash_lock(hashtab_T *ht)
 {
     ++ht->ht_locked;
 }
@@ -307,9 +291,7 @@
  * Must call hash_unlock() later.
  */
     void
-hash_lock_size(ht, size)
-    hashtab_T	*ht;
-    int		size;
+hash_lock_size(hashtab_T *ht, int size)
 {
     (void)hash_may_resize(ht, size);
     ++ht->ht_locked;
@@ -322,8 +304,7 @@
  * This must balance a call to hash_lock().
  */
     void
-hash_unlock(ht)
-    hashtab_T	*ht;
+hash_unlock(hashtab_T *ht)
 {
     --ht->ht_locked;
     (void)hash_may_resize(ht, 0);
@@ -335,9 +316,9 @@
  * Returns OK or FAIL (out of memory).
  */
     static int
-hash_may_resize(ht, minitems)
-    hashtab_T	*ht;
-    int		minitems;		/* minimal number of items */
+hash_may_resize(
+    hashtab_T	*ht,
+    int		minitems)		/* minimal number of items */
 {
     hashitem_T	temparray[HT_INIT_SIZE];
     hashitem_T	*oldarray, *newarray;
@@ -481,8 +462,7 @@
  * lower the percentage the better.
  */
     hash_T
-hash_hash(key)
-    char_u	*key;
+hash_hash(char_u *key)
 {
     hash_T	hash;
     char_u	*p;
