use Py_PROTO macro
diff --git a/Include/abstract.h b/Include/abstract.h
index 8d8900b..be654c9 100644
--- a/Include/abstract.h
+++ b/Include/abstract.h
@@ -247,7 +247,7 @@
        */
 #define  PyObject_DelAttr(O,A) PyObject_SetAttr((O),(A),NULL)
 
-     int PyObject_Cmp(PyObject *o1, PyObject *o2, int *result);
+     int PyObject_Cmp Py_PROTO((PyObject *o1, PyObject *o2, int *result));
 
        /*
 	 Compare the values of o1 and o2 using a routine provided by
@@ -295,7 +295,7 @@
 
        */
 
-     int PyCallable_Check(PyObject *o);
+     int PyCallable_Check Py_PROTO((PyObject *o));
 
        /*
 	 Determine if the object, o, is callable.  Return 1 if the
@@ -307,7 +307,8 @@
 
 
      
-     PyObject *PyObject_CallObject(PyObject *callable_object, PyObject *args);
+     PyObject *PyObject_CallObject Py_PROTO((PyObject *callable_object,
+					     PyObject *args));
 
        /*
 
@@ -319,7 +320,8 @@
 
        */
 
-     PyObject *PyObject_CallFunction(PyObject *callable_object, char *format, ...);
+     PyObject *PyObject_CallFunction Py_PROTO((PyObject *callable_object,
+					       char *format, ...));
 
        /*
 	 Call a callable Python object, callable_object, with a
@@ -332,7 +334,8 @@
        */
 
 
-     PyObject *PyObject_CallMethod(PyObject *o, char *m, char *format, ...);
+     PyObject *PyObject_CallMethod Py_PROTO((PyObject *o, char *m,
+					     char *format, ...));
 
        /*
 	 Call the method named m of object o with a variable number of
@@ -372,7 +375,7 @@
 	 
        */
 
-     PyObject *PyObject_Type(PyObject *o);
+     PyObject *PyObject_Type Py_PROTO((PyObject *o));
 
        /*
 	 On success, returns a type object corresponding to the object
@@ -380,7 +383,7 @@
 	 equivalent to the Python expression: type(o).
        */
 
-     int PyObject_Length(PyObject *o);
+     int PyObject_Length Py_PROTO((PyObject *o));
 
        /*
          Return the length of object o.  If the object, o, provides
@@ -390,7 +393,7 @@
 
        */
 
-     PyObject *PyObject_GetItem(PyObject *o, PyObject *key);
+     PyObject *PyObject_GetItem Py_PROTO((PyObject *o, PyObject *key));
 
        /*
 	 Return element of o corresponding to the object, key, or NULL
@@ -399,7 +402,7 @@
 
        */
 
-     int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v);
+     int PyObject_SetItem Py_PROTO((PyObject *o, PyObject *key, PyObject *v));
 
        /*
 	 Map the object, key, to the value, v.  Returns
@@ -410,7 +413,7 @@
 
 /*  Number Protocol:*/
 
-     int PyNumber_Check(PyObject *o);
+     int PyNumber_Check Py_PROTO((PyObject *o));
 
        /*
          Returns 1 if the object, o, provides numeric protocols, and
@@ -420,7 +423,7 @@
 
        */
 
-     PyObject *PyNumber_Add(PyObject *o1, PyObject *o2);
+     PyObject *PyNumber_Add Py_PROTO((PyObject *o1, PyObject *o2));
 
        /*
 	 Returns the result of adding o1 and o2, or null on failure.
@@ -429,7 +432,7 @@
 
        */
 
-     PyObject *PyNumber_Subtract(PyObject *o1, PyObject *o2);
+     PyObject *PyNumber_Subtract Py_PROTO((PyObject *o1, PyObject *o2));
 
        /*
 	 Returns the result of subtracting o2 from o1, or null on
@@ -438,7 +441,7 @@
 
        */
 
-     PyObject *PyNumber_Multiply(PyObject *o1, PyObject *o2);
+     PyObject *PyNumber_Multiply Py_PROTO((PyObject *o1, PyObject *o2));
 
        /*
 	 Returns the result of multiplying o1 and o2, or null on
@@ -448,7 +451,7 @@
 
        */
 
-     PyObject *PyNumber_Divide(PyObject *o1, PyObject *o2);
+     PyObject *PyNumber_Divide Py_PROTO((PyObject *o1, PyObject *o2));
 
        /*
 	 Returns the result of dividing o1 by o2, or null on failure.
@@ -457,7 +460,7 @@
 
        */
 
-     PyObject *PyNumber_Remainder(PyObject *o1, PyObject *o2);
+     PyObject *PyNumber_Remainder Py_PROTO((PyObject *o1, PyObject *o2));
 
        /*
 	 Returns the remainder of dividing o1 by o2, or null on
@@ -467,7 +470,7 @@
 
        */
 
-     PyObject *PyNumber_Divmod(PyObject *o1, PyObject *o2);
+     PyObject *PyNumber_Divmod Py_PROTO((PyObject *o1, PyObject *o2));
 
        /*
 	 See the built-in function divmod.  Returns NULL on failure.
@@ -477,7 +480,7 @@
 
        */
 
-     PyObject *PyNumber_Power(PyObject *o1, PyObject *o2, PyObject *o3);
+     PyObject *PyNumber_Power Py_PROTO((PyObject *o1, PyObject *o2, PyObject *o3));
 
        /*
 	 See the built-in function pow.  Returns NULL on failure.
@@ -486,7 +489,7 @@
 
        */
 
-     PyObject *PyNumber_Negative(PyObject *o);
+     PyObject *PyNumber_Negative Py_PROTO((PyObject *o));
 
        /*
 	 Returns the negation of o on success, or null on failure.
@@ -494,7 +497,7 @@
 
        */
 
-     PyObject *PyNumber_Positive(PyObject *o);
+     PyObject *PyNumber_Positive Py_PROTO((PyObject *o));
 
        /*
          Returns the (what?) of o on success, or NULL on failure.
@@ -502,7 +505,7 @@
 
        */
 
-     PyObject *PyNumber_Absolute(PyObject *o);
+     PyObject *PyNumber_Absolute Py_PROTO((PyObject *o));
 
        /*
 	 Returns the absolute value of o, or null on failure.  This is
@@ -510,7 +513,7 @@
 
        */
 
-     PyObject *PyNumber_Invert(PyObject *o);
+     PyObject *PyNumber_Invert Py_PROTO((PyObject *o));
 
        /*
 	 Returns the bitwise negation of o on success, or NULL on
@@ -520,7 +523,7 @@
 
        */
 
-     PyObject *PyNumber_Lshift(PyObject *o1, PyObject *o2);
+     PyObject *PyNumber_Lshift Py_PROTO((PyObject *o1, PyObject *o2));
 
        /*
 	 Returns the result of left shifting o1 by o2 on success, or
@@ -530,7 +533,7 @@
 
        */
 
-     PyObject *PyNumber_Rshift(PyObject *o1, PyObject *o2);
+     PyObject *PyNumber_Rshift Py_PROTO((PyObject *o1, PyObject *o2));
 
        /*
 	 Returns the result of right shifting o1 by o2 on success, or
@@ -539,7 +542,7 @@
 
        */
 
-     PyObject *PyNumber_And(PyObject *o1, PyObject *o2);
+     PyObject *PyNumber_And Py_PROTO((PyObject *o1, PyObject *o2));
 
        /*
 	 Returns the result of "anding" o2 and o2 on success and NULL
@@ -549,7 +552,7 @@
 
        */
 
-     PyObject *PyNumber_Xor(PyObject *o1, PyObject *o2);
+     PyObject *PyNumber_Xor Py_PROTO((PyObject *o1, PyObject *o2));
 
        /*
 	 Returns the bitwise exclusive or of o1 by o2 on success, or
@@ -559,7 +562,7 @@
 
        */
 
-     PyObject *PyNumber_Or(PyObject *o1, PyObject *o2);
+     PyObject *PyNumber_Or Py_PROTO((PyObject *o1, PyObject *o2));
 
        /*
 	 Returns the result or o1 and o2 on success, or NULL on
@@ -579,7 +582,7 @@
 
        */
 
-     PyObject *PyNumber_Int(PyObject *o);
+     PyObject *PyNumber_Int Py_PROTO((PyObject *o));
 
        /*
 	 Returns the o converted to an integer object on success, or
@@ -588,7 +591,7 @@
 
        */
 
-     PyObject *PyNumber_Long(PyObject *o);
+     PyObject *PyNumber_Long Py_PROTO((PyObject *o));
 
        /*
 	 Returns the o converted to a long integer object on success,
@@ -597,7 +600,7 @@
 
        */
 
-     PyObject *PyNumber_Float(PyObject *o);
+     PyObject *PyNumber_Float Py_PROTO((PyObject *o));
 
        /*
 	 Returns the o converted to a float object on success, or NULL
@@ -608,7 +611,7 @@
 
 /*  Sequence protocol:*/
 
-     int PySequence_Check(PyObject *o);
+     int PySequence_Check Py_PROTO((PyObject *o));
 
        /*
          Return 1 if the object provides sequence protocol, and zero
@@ -618,7 +621,7 @@
 
        */
 
-     PyObject *PySequence_Concat(PyObject *o1, PyObject *o2);
+     PyObject *PySequence_Concat Py_PROTO((PyObject *o1, PyObject *o2));
 
        /*
 	 Return the concatination of o1 and o2 on success, and NULL on
@@ -627,7 +630,7 @@
 
        */
 
-     PyObject *PySequence_Repeat(PyObject *o, int count);
+     PyObject *PySequence_Repeat Py_PROTO((PyObject *o, int count));
 
        /*
 	 Return the result of repeating sequence object o count times,
@@ -636,7 +639,7 @@
 
        */
 
-     PyObject *PySequence_GetItem(PyObject *o, int i);
+     PyObject *PySequence_GetItem Py_PROTO((PyObject *o, int i));
 
        /*
 	 Return the ith element of o, or NULL on failure. This is the
@@ -644,7 +647,7 @@
 
        */
 
-     PyObject *PySequence_GetSlice(PyObject *o, int i1, int i2);
+     PyObject *PySequence_GetSlice Py_PROTO((PyObject *o, int i1, int i2));
 
        /*
 	 Return the slice of sequence object o between i1 and i2, or
@@ -653,7 +656,7 @@
 
        */
 
-     int PySequence_SetItem(PyObject *o, int i, PyObject *v);
+     int PySequence_SetItem Py_PROTO((PyObject *o, int i, PyObject *v));
 
        /*
 	 Assign object v to the ith element of o.  Returns
@@ -662,7 +665,7 @@
 
        */
 
-     int PySequence_SetSlice(PyObject *o, int i1, int i2, PyObject *v);
+     int PySequence_SetSlice Py_PROTO((PyObject *o, int i1, int i2, PyObject *v));
 
        /*
          Assign the sequence object, v, to the slice in sequence
@@ -670,14 +673,14 @@
 	 equivalent of the Python statement: o[i1:i2]=v.
        */
 
-     PyObject *PySequence_Tuple(PyObject *o);
+     PyObject *PySequence_Tuple Py_PROTO((PyObject *o));
 
        /*
 	 Returns the o as a tuple on success, and NULL on failure.
 	 This is equivalent to the Python expression: tuple(o)
        */
 
-     int PySequence_Count(PyObject *o, PyObject *value);
+     int PySequence_Count Py_PROTO((PyObject *o, PyObject *value));
 
        /*
          Return the number of occurrences on value on o, that is,
@@ -686,7 +689,7 @@
 	 expression: o.count(value).
        */
 
-     int PySequence_In(PyObject *o, PyObject *value);
+     int PySequence_In Py_PROTO((PyObject *o, PyObject *value));
 
        /*
 	 Determine if o contains value.  If an item in o is equal to
@@ -694,7 +697,7 @@
 	 is equivalent to the Python expression: value in o.
        */
 
-     int PySequence_Index(PyObject *o, PyObject *value);
+     int PySequence_Index Py_PROTO((PyObject *o, PyObject *value));
 
        /*
 	 Return the first index for which o[i]=value.  On error,
@@ -704,7 +707,7 @@
 
 /*  Mapping protocol:*/
 
-     int PyMapping_Check(PyObject *o);
+     int PyMapping_Check Py_PROTO((PyObject *o));
 
        /*
          Return 1 if the object provides mapping protocol, and zero
@@ -713,7 +716,7 @@
 	 This function always succeeds.
        */
 
-     int PyMapping_Length(PyObject *o);
+     int PyMapping_Length Py_PROTO((PyObject *o));
 
        /*
          Returns the number of keys in object o on success, and -1 on
@@ -721,7 +724,7 @@
 	 this is equivalent to the Python expression: len(o).
        */
 
-     int PyMapping_DelItemString(PyObject *o, char *key);
+     int PyMapping_DelItemString Py_PROTO((PyObject *o, char *key));
 
        /*
 	 Remove the mapping for object, key, from the object *o.
@@ -729,7 +732,7 @@
 	 the Python statement: del o[key].
        */
 
-     int PyMapping_DelItem(PyObject *o, PyObject *key);
+     int PyMapping_DelItem Py_PROTO((PyObject *o, PyObject *key));
 
        /*
 	 Remove the mapping for object, key, from the object *o.
@@ -737,7 +740,7 @@
 	 the Python statement: del o[key].
        */
 
-     int PyMapping_HasKeyString(PyObject *o, char *key);
+     int PyMapping_HasKeyString Py_PROTO((PyObject *o, char *key));
 
        /*
 	 On success, return 1 if the mapping object has the key, key,
@@ -747,7 +750,7 @@
 	 This function always succeeds.
        */
 
-     int PyMapping_HasKey(PyObject *o, PyObject *key);
+     int PyMapping_HasKey Py_PROTO((PyObject *o, PyObject *key));
 
        /*
 	 Return 1 if the mapping object has the key, key,
@@ -790,7 +793,7 @@
        */
 #define PyMapping_Items(O) PyObject_CallMethod(O,"items",NULL)
 
-     PyObject *PyMapping_GetItemString(PyObject *o, char *key);
+     PyObject *PyMapping_GetItemString Py_PROTO((PyObject *o, char *key));
 
        /*
 	 Return element of o corresponding to the object, key, or NULL
@@ -798,7 +801,8 @@
 	 o[key].
        */
 
-     int PyMapping_SetItemString(PyObject *o, char *key, PyObject *value);
+     int PyMapping_SetItemString Py_PROTO((PyObject *o, char *key,
+					   PyObject *value));
 
        /*
 	 Map the object, key, to the value, v.  Returns 
@@ -807,4 +811,7 @@
       */
 
 
+#ifdef __cplusplus
+}
+#endif
 #endif /* Py_ABSTRACTOBJECT_H */