diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c
index a7be915..3b117e6 100644
--- a/Modules/_codecsmodule.c
+++ b/Modules/_codecsmodule.c
@@ -624,7 +624,7 @@
 };
 
 DL_EXPORT(void)
-init_codecs()
+init_codecs(void)
 {
     Py_InitModule("_codecs", _codecs_functions);
 }
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index a9b71a1..b220c94 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -1270,9 +1270,7 @@
 };
 
 static PyObject *
-PyCursesWindow_GetAttr(self, name)
-	PyCursesWindowObject *self;
-	char *name;
+PyCursesWindow_GetAttr(PyCursesWindowObject *self, char *name)
 {
   return Py_FindMethod(PyCursesWindow_Methods, (PyObject *)self, name);
 }
@@ -2161,7 +2159,7 @@
 /* Initialization function for the module */
 
 void
-init_curses()
+init_curses(void)
 {
 	PyObject *m, *d, *v;
 
diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c
index e32e81b..4362ffd 100644
--- a/Modules/_localemodule.c
+++ b/Modules/_localemodule.c
@@ -400,7 +400,7 @@
 };
 
 DL_EXPORT(void)
-init_locale()
+init_locale(void)
 {
     PyObject *m, *d, *x;
 
diff --git a/Modules/_sre.c b/Modules/_sre.c
index 5beb3ea..e731391 100644
--- a/Modules/_sre.c
+++ b/Modules/_sre.c
@@ -2097,7 +2097,7 @@
 #if defined(WIN32)
 __declspec(dllexport)
 #endif
-init_sre()
+init_sre(void)
 {
 	/* Patch object types */
 	Pattern_Type.ob_type = Match_Type.ob_type =
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index 0383f1e..f61b0de 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -1912,9 +1912,7 @@
 }
 
 static PyObject *
-Tkinter_Create(self, args)
-	PyObject *self;
-	PyObject *args;
+Tkinter_Create(PyObject *self, PyObject *args)
 {
 	char *screenName = NULL;
 	char *baseName = NULL;
@@ -1967,7 +1965,7 @@
 static PyThreadState *event_tstate = NULL;
 
 static int
-EventHook()
+EventHook(void)
 {
 #ifndef MS_WINDOWS
 	int tfile;
@@ -2026,7 +2024,7 @@
 #endif
 
 static void
-EnableEventHook()
+EnableEventHook(void)
 {
 #ifdef WAIT_FOR_STDIN
 	if (PyOS_InputHook == NULL) {
@@ -2039,7 +2037,7 @@
 }
 
 static void
-DisableEventHook()
+DisableEventHook(void)
 {
 #ifdef WAIT_FOR_STDIN
 	if (Tk_GetNumMainWindows() == 0 && PyOS_InputHook == EventHook) {
@@ -2071,7 +2069,7 @@
 
 
 DL_EXPORT(void)
-init_tkinter()
+init_tkinter(void)
 {
 	PyObject *m, *d;
 
@@ -2218,7 +2216,7 @@
 ** the resources from the application. Again, we ignore errors.
 */
 static
-mac_addlibresources()
+mac_addlibresources(void)
 {
 	if ( !loaded_from_shlib ) 
 		return;
diff --git a/Modules/almodule.c b/Modules/almodule.c
index 84a9895..f162cf5 100644
--- a/Modules/almodule.c
+++ b/Modules/almodule.c
@@ -2037,7 +2037,7 @@
 ;
 
 void
-inital()
+inital(void)
 {
 	PyObject *m, *d, *x;
 
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index 10c8f57..55a0dce 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -1407,7 +1407,7 @@
 };
 
 DL_EXPORT(void)
-initarray()
+initarray(void)
 {
 	PyObject *m, *d;
 
diff --git a/Modules/audioop.c b/Modules/audioop.c
index 73612cb..08e8fd4 100644
--- a/Modules/audioop.c
+++ b/Modules/audioop.c
@@ -284,10 +284,7 @@
 	return PyInt_FromLong(val);
 }
 
-static double _sum2(a, b, len)
-	short *a;
-        short *b;
-        int len;
+static double _sum2(short *a, short *b, int len)
 {
 	int i;
 	double sum = 0.0;
@@ -899,8 +896,7 @@
 }
 
 static int
-gcd(a, b)
-	int a, b;
+gcd(int a, int b)
 {
 	while (b > 0) {
 		int tmp = a % b;
@@ -1344,7 +1340,7 @@
 };
 
 DL_EXPORT(void)
-initaudioop()
+initaudioop(void)
 {
 	PyObject *m, *d;
 	m = Py_InitModule("audioop", audioop_methods);
diff --git a/Modules/binascii.c b/Modules/binascii.c
index fca4ca0..5c9944a 100644
--- a/Modules/binascii.c
+++ b/Modules/binascii.c
@@ -899,7 +899,7 @@
 static char doc_binascii[] = "Conversion between binary data and ASCII";
 
 DL_EXPORT(void)
-initbinascii()
+initbinascii(void)
 {
 	PyObject *m, *d, *x;
 
diff --git a/Modules/cdmodule.c b/Modules/cdmodule.c
index a7cfb54..8042075 100644
--- a/Modules/cdmodule.c
+++ b/Modules/cdmodule.c
@@ -766,7 +766,7 @@
 };
 
 void
-initcd()
+initcd(void)
 {
 	PyObject *m, *d;
 
diff --git a/Modules/clmodule.c b/Modules/clmodule.c
index ff4c159..d38a0c3 100644
--- a/Modules/clmodule.c
+++ b/Modules/clmodule.c
@@ -978,7 +978,7 @@
 #endif
 
 void
-initcl()
+initcl(void)
 {
 	PyObject *m, *d, *x;
 
diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c
index d110521..b6a6585 100644
--- a/Modules/cmathmodule.c
+++ b/Modules/cmathmodule.c
@@ -316,7 +316,7 @@
 /* And now the glue to make them available from Python: */
 
 static PyObject *
-math_error()
+math_error(void)
 {
 	if (errno == EDOM)
 		PyErr_SetString(PyExc_ValueError, "math domain error");
@@ -394,7 +394,7 @@
 };
 
 DL_EXPORT(void)
-initcmath()
+initcmath(void)
 {
 	PyObject *m, *d, *v;
 	
diff --git a/Modules/cryptmodule.c b/Modules/cryptmodule.c
index 2c043f9..770965e 100644
--- a/Modules/cryptmodule.c
+++ b/Modules/cryptmodule.c
@@ -36,7 +36,7 @@
 };
 
 DL_EXPORT(void)
-initcrypt()
+initcrypt(void)
 {
 	Py_InitModule("crypt", crypt_methods);
 }
diff --git a/Modules/dlmodule.c b/Modules/dlmodule.c
index 169f49c..09bd9d3 100644
--- a/Modules/dlmodule.c
+++ b/Modules/dlmodule.c
@@ -191,7 +191,7 @@
 };
 
 void
-initdl()
+initdl(void)
 {
 	PyObject *m, *d, *x;
 
diff --git a/Modules/errnomodule.c b/Modules/errnomodule.c
index a364bf2..8607ea2 100644
--- a/Modules/errnomodule.c
+++ b/Modules/errnomodule.c
@@ -70,7 +70,7 @@
 e.g. os.strerror(2) could return 'No such file or directory'.";
 
 DL_EXPORT(void)
-initerrno()
+initerrno(void)
 {
 	PyObject *m, *d, *de;
 	m = Py_InitModule3("errno", errno_methods, errno__doc__);
diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c
index 37ea9eb..1483847 100644
--- a/Modules/fcntlmodule.c
+++ b/Modules/fcntlmodule.c
@@ -312,7 +312,7 @@
 }
 
 DL_EXPORT(void)
-initfcntl()
+initfcntl(void)
 {
 	PyObject *m, *d;
 
diff --git a/Modules/flmodule.c b/Modules/flmodule.c
index e2aa6a1..ffb4d4d 100644
--- a/Modules/flmodule.c
+++ b/Modules/flmodule.c
@@ -2133,7 +2133,7 @@
 };
 
 DL_EXPORT(void)
-initfl()
+initfl(void)
 {
 	Py_InitModule("fl", forms_methods);
 	foreground();
diff --git a/Modules/fmmodule.c b/Modules/fmmodule.c
index 18c1ace..df5f27b 100644
--- a/Modules/fmmodule.c
+++ b/Modules/fmmodule.c
@@ -278,7 +278,7 @@
 
 
 void
-initfm()
+initfm(void)
 {
 	Py_InitModule("fm", fm_methods);
 	fminit();
diff --git a/Modules/getbuildinfo.c b/Modules/getbuildinfo.c
index 35da3f7..8c710f8 100644
--- a/Modules/getbuildinfo.c
+++ b/Modules/getbuildinfo.c
@@ -30,7 +30,7 @@
 
 
 const char *
-Py_GetBuildInfo()
+Py_GetBuildInfo(void)
 {
 	static char buildinfo[50];
 	sprintf(buildinfo, "#%d, %.20s, %.9s", BUILD, DATE, TIME);
diff --git a/Modules/getpath.c b/Modules/getpath.c
index 0807fa3..3c418d6 100644
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -347,7 +347,7 @@
 
 
 static void
-calculate_path()
+calculate_path(void)
 {
     extern char *Py_GetProgramName();
 
@@ -572,7 +572,7 @@
 /* External interface */
 
 char *
-Py_GetPath()
+Py_GetPath(void)
 {
     if (!module_search_path)
         calculate_path();
@@ -580,7 +580,7 @@
 }
 
 char *
-Py_GetPrefix()
+Py_GetPrefix(void)
 {
     if (!module_search_path)
         calculate_path();
@@ -588,7 +588,7 @@
 }
 
 char *
-Py_GetExecPrefix()
+Py_GetExecPrefix(void)
 {
     if (!module_search_path)
         calculate_path();
@@ -596,7 +596,7 @@
 }
 
 char *
-Py_GetProgramFullPath()
+Py_GetProgramFullPath(void)
 {
     if (!module_search_path)
         calculate_path();
diff --git a/Modules/glmodule.c b/Modules/glmodule.c
index baeb294..2d314b9 100644
--- a/Modules/glmodule.c
+++ b/Modules/glmodule.c
@@ -7633,7 +7633,7 @@
 };
 
 void
-initgl()
+initgl(void)
 {
 	(void) Py_InitModule("gl", gl_methods);
 }
diff --git a/Modules/grpmodule.c b/Modules/grpmodule.c
index ef2f0f0..f13472f 100644
--- a/Modules/grpmodule.c
+++ b/Modules/grpmodule.c
@@ -132,7 +132,7 @@
 
 
 DL_EXPORT(void)
-initgrp()
+initgrp(void)
 {
     Py_InitModule3("grp", grp_methods, grp__doc__);
 }
diff --git a/Modules/imageop.c b/Modules/imageop.c
index e22c96f..7c7116d 100644
--- a/Modules/imageop.c
+++ b/Modules/imageop.c
@@ -706,7 +706,7 @@
 
 
 DL_EXPORT(void)
-initimageop()
+initimageop(void)
 {
 	PyObject *m, *d;
 	m = Py_InitModule("imageop", imageop_methods);
diff --git a/Modules/imgfile.c b/Modules/imgfile.c
index e1e798f..9a7f74f 100644
--- a/Modules/imgfile.c
+++ b/Modules/imgfile.c
@@ -509,7 +509,7 @@
 
 
 void
-initimgfile()
+initimgfile(void)
 {
 	PyObject *m, *d;
 	m = Py_InitModule("imgfile", imgfile_methods);
diff --git a/Modules/linuxaudiodev.c b/Modules/linuxaudiodev.c
index 6a1c5ff..b0677ef 100644
--- a/Modules/linuxaudiodev.c
+++ b/Modules/linuxaudiodev.c
@@ -384,7 +384,7 @@
 };
 
 void
-initlinuxaudiodev()
+initlinuxaudiodev(void)
 {
     PyObject *m, *d, *x;
   
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index a20197a..2aa0071 100644
--- a/Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -38,7 +38,7 @@
 #endif
 
 static PyObject *
-math_error()
+math_error(void)
 {
 	if (errno == EDOM)
 		PyErr_SetString(PyExc_ValueError, "math domain error");
@@ -259,7 +259,7 @@
 mathematical functions defined by the C standard.";
 
 DL_EXPORT(void)
-initmath()
+initmath(void)
 {
 	PyObject *m, *d, *v;
 	
diff --git a/Modules/md5module.c b/Modules/md5module.c
index e3d5804..59e4c6c 100644
--- a/Modules/md5module.c
+++ b/Modules/md5module.c
@@ -31,7 +31,7 @@
 #define is_md5object(v)		((v)->ob_type == &MD5type)
 
 static md5object *
-newmd5object()
+newmd5object(void)
 {
 	md5object *md5p;
 
@@ -236,7 +236,7 @@
 /* Initialize this module. */
 
 DL_EXPORT(void)
-initmd5()
+initmd5(void)
 {
 	PyObject *m, *d;
 
diff --git a/Modules/mpzmodule.c b/Modules/mpzmodule.c
index d4882c2..ad52736 100644
--- a/Modules/mpzmodule.c
+++ b/Modules/mpzmodule.c
@@ -94,7 +94,7 @@
 /* #define MPZ_DEBUG */
 
 static mpzobject *
-newmpzobject()
+newmpzobject(void)
 {
 	mpzobject *mpzp;
 
@@ -1632,8 +1632,7 @@
 #ifdef MP_TEST_ALLOC
 #define MP_TEST_SIZE		4
 static const char mp_test_magic[MP_TEST_SIZE] = {'\xAA','\xAA','\xAA','\xAA'};
-static mp_test_error( location )
-	int *location;
+static mp_test_error(int *location)
 {
 	/* assumptions: *alloc returns address divisible by 4,
 	mpz_* routines allocate in chunks divisible by four */
@@ -1716,7 +1715,7 @@
 /* Initialize this module. */
 
 DL_EXPORT(void)
-initmpz()
+initmpz(void)
 {
 	PyObject *module;
 	PyObject *dict;
diff --git a/Modules/newmodule.c b/Modules/newmodule.c
index e8c758c..3ebac7f 100644
--- a/Modules/newmodule.c
+++ b/Modules/newmodule.c
@@ -195,7 +195,7 @@
 You need to know a great deal about the interpreter to use this!";
 
 DL_EXPORT(void)
-initnew()
+initnew(void)
 {
 	Py_InitModule4("new", new_methods, new_doc, (PyObject *)NULL,
 		       PYTHON_API_VERSION);
diff --git a/Modules/nismodule.c b/Modules/nismodule.c
index 616f38b..3649fd5 100644
--- a/Modules/nismodule.c
+++ b/Modules/nismodule.c
@@ -295,7 +295,7 @@
 
 static
 nismaplist *
-nis_maplist ()
+nis_maplist (void)
 {
 	nisresp_maplist *list;
 	char *dom;
@@ -371,7 +371,7 @@
 };
 
 void
-initnis ()
+initnis (void)
 {
 	PyObject *m, *d;
 	m = Py_InitModule("nis", nis_methods);
diff --git a/Modules/operator.c b/Modules/operator.c
index 46e5b51..b8bab59 100644
--- a/Modules/operator.c
+++ b/Modules/operator.c
@@ -247,7 +247,7 @@
 /* Initialization function for the module (*must* be called initoperator) */
 
 DL_EXPORT(void)
-initoperator()
+initoperator(void)
 {
         /* Create the module and add the functions */
         Py_InitModule4("operator", operator_methods, operator_doc,
diff --git a/Modules/pcremodule.c b/Modules/pcremodule.c
index 99c6758..3043405 100644
--- a/Modules/pcremodule.c
+++ b/Modules/pcremodule.c
@@ -629,7 +629,7 @@
 /* Initialization function for the module (*must* be called initpcre) */
 
 DL_EXPORT(void)
-initpcre()
+initpcre(void)
 {
 	PyObject *m, *d;
 
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 7413cfe..f39a241 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -284,7 +284,7 @@
 #endif /* !_MSC_VER */
 
 static PyObject *
-convertenviron()
+convertenviron(void)
 {
 	PyObject *d;
 	char **e;
@@ -344,7 +344,7 @@
 /* Set a POSIX-specific error from errno, and return NULL */
 
 static PyObject *
-posix_error()
+posix_error(void)
 {
 	return PyErr_SetFromErrno(PyExc_OSError);
 }
@@ -1916,9 +1916,7 @@
 Return the parent's process id.";
 
 static PyObject *
-posix_getppid(self, args)
-	PyObject *self;
-	PyObject *args;
+posix_getppid(PyObject *self, PyObject *args)
 {
 	if (!PyArg_ParseTuple(args, ":getppid"))
 		return NULL;
@@ -2856,7 +2854,7 @@
 	
 #if defined(PYCC_VACPP) && defined(PYOS_OS2)
 static long
-system_uptime()
+system_uptime(void)
 {
     ULONG     value = 0;
 
@@ -5196,8 +5194,7 @@
 #endif
 
 static int
-all_ins(d)
-        PyObject* d;
+all_ins(PyObject *d)
 {
 #ifdef F_OK
         if (ins(d, "F_OK", (long)F_OK)) return -1;
@@ -5295,7 +5292,7 @@
 #endif
 
 DL_EXPORT(void)
-INITFUNC()
+INITFUNC(void)
 {
 	PyObject *m, *d, *v;
 	
diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c
index c03dce8..ada9e6d 100644
--- a/Modules/pwdmodule.c
+++ b/Modules/pwdmodule.c
@@ -137,7 +137,7 @@
 };
 
 DL_EXPORT(void)
-initpwd()
+initpwd(void)
 {
 	Py_InitModule4("pwd", pwd_methods, pwd__doc__,
                        (PyObject *)NULL, PYTHON_API_VERSION);
diff --git a/Modules/readline.c b/Modules/readline.c
index 119f7f9..a0a88eb 100644
--- a/Modules/readline.c
+++ b/Modules/readline.c
@@ -396,7 +396,7 @@
 /* Helper to initialize GNU readline properly. */
 
 static void
-setup_readline()
+setup_readline(void)
 {
 	rl_readline_name = "python";
 	/* Force rebind of TAB to insert-tab */
@@ -485,7 +485,7 @@
 "Importing this module enables command line editing using GNU readline.";
 
 DL_EXPORT(void)
-initreadline()
+initreadline(void)
 {
 	PyObject *m;
 
diff --git a/Modules/regexmodule.c b/Modules/regexmodule.c
index 5b284c6..ff3b895 100644
--- a/Modules/regexmodule.c
+++ b/Modules/regexmodule.c
@@ -657,7 +657,7 @@
 };
 
 DL_EXPORT(void)
-initregex()
+initregex(void)
 {
 	PyObject *m, *d, *v;
 	int i;
diff --git a/Modules/regexpr.c b/Modules/regexpr.c
index 70b7ee1..8b36580 100644
--- a/Modules/regexpr.c
+++ b/Modules/regexpr.c
@@ -446,7 +446,7 @@
 
 unsigned char re_syntax_table[256];
 
-void re_compile_initialize()
+void re_compile_initialize(void)
 {
 	int a;
   
diff --git a/Modules/resource.c b/Modules/resource.c
index c0f52cf..9da87af 100644
--- a/Modules/resource.c
+++ b/Modules/resource.c
@@ -183,7 +183,7 @@
 	/* errors will be checked by initresource() */
 }
 
-void initresource()
+void initresource(void)
 {
 	PyObject *m, *d;
 
diff --git a/Modules/rgbimgmodule.c b/Modules/rgbimgmodule.c
index a883f6a..c8c42c2 100644
--- a/Modules/rgbimgmodule.c
+++ b/Modules/rgbimgmodule.c
@@ -755,7 +755,7 @@
 
 
 DL_EXPORT(void)
-initrgbimg()
+initrgbimg(void)
 {
 	PyObject *m, *d;
 	m = Py_InitModule("rgbimg", rgbimg_methods);
diff --git a/Modules/rotormodule.c b/Modules/rotormodule.c
index 6c0aff6..393e73a 100644
--- a/Modules/rotormodule.c
+++ b/Modules/rotormodule.c
@@ -618,7 +618,7 @@
 
 
 DL_EXPORT(void)
-initrotor()
+initrotor(void)
 {
 	(void)Py_InitModule("rotor", rotor_methods);
 }
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index 8f73d38..674a738 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -337,7 +337,7 @@
 On Windows, only sockets are supported; on Unix, all file descriptors.";
 
 DL_EXPORT(void)
-initselect()
+initselect(void)
 {
 	PyObject *m, *d;
 	m = Py_InitModule3("select", select_methods, module_doc);
diff --git a/Modules/sgimodule.c b/Modules/sgimodule.c
index 0f1ec9e..04bd3be 100644
--- a/Modules/sgimodule.c
+++ b/Modules/sgimodule.c
@@ -59,7 +59,7 @@
 
 
 void
-initsgi()
+initsgi(void)
 {
 	Py_InitModule("sgi", sgi_methods);
 }
diff --git a/Modules/shamodule.c b/Modules/shamodule.c
index 91ff9ff..d45dd89 100644
--- a/Modules/shamodule.c
+++ b/Modules/shamodule.c
@@ -350,7 +350,7 @@
 
 
 static SHAobject *
-newSHAobject()
+newSHAobject(void)
 {
     return (SHAobject *)PyObject_New(SHAobject, &SHAtype);
 }
@@ -538,7 +538,7 @@
 	Py_XDECREF(o); }
 
 void
-initsha()
+initsha(void)
 {
     PyObject *d, *m;
 
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index 47151eb..757fe78 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -312,7 +312,7 @@
 the first is the signal number, the second is the interrupted stack frame.";
 
 DL_EXPORT(void)
-initsignal()
+initsignal(void)
 {
 	PyObject *m, *d, *x;
 	int i;
@@ -553,7 +553,7 @@
 }
 
 static void
-finisignal()
+finisignal(void)
 {
 	int i;
 	PyObject *func;
@@ -583,7 +583,7 @@
 
 /* Declared in pyerrors.h */
 int
-PyErr_CheckSignals()
+PyErr_CheckSignals(void)
 {
 	int i;
 	PyObject *f;
@@ -623,7 +623,7 @@
  * Declared in pyerrors.h
  */
 void
-PyErr_SetInterrupt()
+PyErr_SetInterrupt(void)
 {
 	is_tripped++;
 	Handlers[SIGINT].tripped = 1;
@@ -631,20 +631,20 @@
 }
 
 void
-PyOS_InitInterrupts()
+PyOS_InitInterrupts(void)
 {
 	initsignal();
 	_PyImport_FixupExtension("signal", "signal");
 }
 
 void
-PyOS_FiniInterrupts()
+PyOS_FiniInterrupts(void)
 {
 	finisignal();
 }
 
 int
-PyOS_InterruptOccurred()
+PyOS_InterruptOccurred(void)
 {
 	if (Handlers[SIGINT].tripped) {
 #ifdef WITH_THREAD
@@ -658,7 +658,7 @@
 }
 
 void
-PyOS_AfterFork()
+PyOS_AfterFork(void)
 {
 #ifdef WITH_THREAD
 	main_thread = PyThread_get_thread_ident();
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 56e30d1..50cd3eb 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -228,7 +228,7 @@
    and return a NULL pointer from a function. */
 
 static PyObject *
-PySocket_Err()
+PySocket_Err(void)
 {
 #ifdef MS_WINDOWS
 	if (WSAGetLastError()) {
@@ -1437,9 +1437,7 @@
 /* Convenience function common to gethostbyname_ex and gethostbyaddr */
 
 static PyObject *
-gethost_common(h, addr)
-	struct hostent *h;
-	struct sockaddr_in *addr;
+gethost_common(struct hostent *h, struct sockaddr_in *addr)
 {
 	char **pch;
 	PyObject *rtn_tuple = (PyObject *)NULL;
@@ -2185,13 +2183,13 @@
 /* Additional initialization and cleanup for NT/Windows */
 
 static void
-NTcleanup()
+NTcleanup(void)
 {
 	WSACleanup();
 }
 
 static int
-NTinit()
+NTinit(void)
 {
 	WSADATA WSAData;
 	int ret;
@@ -2225,13 +2223,13 @@
 /* Additional initialization and cleanup for OS/2 */
 
 static void
-OS2cleanup()
+OS2cleanup(void)
 {
     /* No cleanup is necessary for OS/2 Sockets */
 }
 
 static int
-OS2init()
+OS2init(void)
 {
     char reason[64];
     int rc = sock_init();
diff --git a/Modules/soundex.c b/Modules/soundex.c
index e905fe0..acb3344 100644
--- a/Modules/soundex.c
+++ b/Modules/soundex.c
@@ -167,7 +167,7 @@
 /* Register the method table.
  */
 DL_EXPORT(void)
-initsoundex()
+initsoundex(void)
 {
     (void) Py_InitModule4("soundex",
 			  SoundexMethods,
diff --git a/Modules/stropmodule.c b/Modules/stropmodule.c
index 62a17a3..0ec9e3d 100644
--- a/Modules/stropmodule.c
+++ b/Modules/stropmodule.c
@@ -1180,7 +1180,7 @@
 
 
 DL_EXPORT(void)
-initstrop()
+initstrop(void)
 {
 	PyObject *m, *d, *s;
 	char buf[256];
diff --git a/Modules/structmodule.c b/Modules/structmodule.c
index a2b4096..1275955 100644
--- a/Modules/structmodule.c
+++ b/Modules/structmodule.c
@@ -1222,7 +1222,7 @@
 /* Module initialization */
 
 DL_EXPORT(void)
-initstruct()
+initstruct(void)
 {
 	PyObject *m, *d;
 
diff --git a/Modules/sunaudiodev.c b/Modules/sunaudiodev.c
index d4e5ec9..4f9d2bb 100644
--- a/Modules/sunaudiodev.c
+++ b/Modules/sunaudiodev.c
@@ -482,7 +482,7 @@
 };
 
 void
-initsunaudiodev()
+initsunaudiodev(void)
 {
 	PyObject *m, *d;
 
diff --git a/Modules/svmodule.c b/Modules/svmodule.c
index ffbea11..95b3e14 100644
--- a/Modules/svmodule.c
+++ b/Modules/svmodule.c
@@ -41,7 +41,7 @@
 
 /* Set a SV-specific error from svideo_errno and return NULL */
 static PyObject *
-sv_error()
+sv_error(void)
 {
 	PyErr_SetString(SvError, svStrerror(svideo_errno));
 	return NULL;
@@ -961,7 +961,7 @@
 };
 
 void
-initsv()
+initsv(void)
 {
 	PyObject *m, *d;
 
diff --git a/Modules/syslogmodule.c b/Modules/syslogmodule.c
index 2381ff8..6452620 100644
--- a/Modules/syslogmodule.c
+++ b/Modules/syslogmodule.c
@@ -168,7 +168,7 @@
 /* Initialization function for the module */
 
 DL_EXPORT(void)
-initsyslog()
+initsyslog(void)
 {
 	PyObject *m, *d;
 
diff --git a/Modules/tclNotify.c b/Modules/tclNotify.c
index 422c944..7a4e7c0 100644
--- a/Modules/tclNotify.c
+++ b/Modules/tclNotify.c
@@ -100,7 +100,7 @@
  */
 
 static void
-InitNotifier()
+InitNotifier(void)
 {
     initialized = 1;
     memset(&notifier, 0, sizeof(notifier));
@@ -507,7 +507,7 @@
  */
 
 int
-Tcl_GetServiceMode()
+Tcl_GetServiceMode(void)
 {
     if (!initialized) {
 	InitNotifier();
@@ -799,7 +799,7 @@
  */
 
 int
-Tcl_ServiceAll()
+Tcl_ServiceAll(void)
 {
     int result = 0;
     EventSource *sourcePtr;
@@ -894,7 +894,7 @@
  */
 
 int
-PyTcl_WaitUntilEvent()
+PyTcl_WaitUntilEvent(void)
 {
     int flags = TCL_ALL_EVENTS;
     int result = 0, oldMode;
diff --git a/Modules/termios.c b/Modules/termios.c
index 80d41de..0dbb257 100644
--- a/Modules/termios.c
+++ b/Modules/termios.c
@@ -288,7 +288,7 @@
 };
 
 DL_EXPORT(void)
-PyInit_termios()
+PyInit_termios(void)
 {
 	PyObject *m, *d;
 
diff --git a/Modules/threadmodule.c b/Modules/threadmodule.c
index 1a1f667..ef73c26 100644
--- a/Modules/threadmodule.c
+++ b/Modules/threadmodule.c
@@ -34,7 +34,7 @@
 staticforward PyTypeObject Locktype;
 
 static lockobject *
-newlockobject()
+newlockobject(void)
 {
 	lockobject *self;
 	self = PyObject_New(lockobject, &Locktype);
@@ -377,7 +377,7 @@
 will block until another thread unlocks it.  Deadlocks may ensue.";
 
 DL_EXPORT(void)
-initthread()
+initthread(void)
 {
 	PyObject *m, *d;
 
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 9b2fd99..b9aba51 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -107,7 +107,7 @@
 static long timezone;
 
 static void 
-initmactimezone()
+initmactimezone(void)
 {
 	MachineLocation	loc;
 	long		delta;
@@ -579,7 +579,7 @@
   
 
 DL_EXPORT(void)
-inittime()
+inittime(void)
 {
 	PyObject *m, *d;
 	char *p;
@@ -667,7 +667,7 @@
 /* Implement floattime() for various platforms */
 
 static double
-floattime()
+floattime(void)
 {
 	/* There are three ways to get the time:
 	  (1) gettimeofday() -- resolution in microseconds
diff --git a/Modules/timingmodule.c b/Modules/timingmodule.c
index f7323bb..0742005 100644
--- a/Modules/timingmodule.c
+++ b/Modules/timingmodule.c
@@ -69,7 +69,7 @@
 };
 
 
-DL_EXPORT(void) inittiming()
+DL_EXPORT(void) inittiming(void)
 {
 	(void)Py_InitModule("timing", timing_methods);
 	if (PyErr_Occurred())
diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c
index 8fd5fd9..890fb97 100644
--- a/Modules/unicodedata.c
+++ b/Modules/unicodedata.c
@@ -273,7 +273,7 @@
 };
 
 DL_EXPORT(void)
-initunicodedata()
+initunicodedata(void)
 {
     Py_InitModule("unicodedata", unicodedata_functions);
 }
diff --git a/Modules/xxmodule.c b/Modules/xxmodule.c
index 0477919..ede1979 100644
--- a/Modules/xxmodule.c
+++ b/Modules/xxmodule.c
@@ -202,7 +202,7 @@
 /* Initialization function for the module (*must* be called initxx) */
 
 DL_EXPORT(void)
-initxx()
+initxx(void)
 {
 	PyObject *m, *d;
 
diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c
index 492adf2..ff34706 100644
--- a/Modules/zlibmodule.c
+++ b/Modules/zlibmodule.c
@@ -829,7 +829,7 @@
 ;
 
 DL_EXPORT(void)
-PyInit_zlib()
+PyInit_zlib(void)
 {
         PyObject *m, *d, *ver;
         Comptype.ob_type = &PyType_Type;
