bpo-47208: Allow vendors to override CTYPES_MAX_ARGCOUNT (GH-32297)

diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.py
index 5561ffe..1099cf9 100644
--- a/Lib/ctypes/test/test_callbacks.py
+++ b/Lib/ctypes/test/test_callbacks.py
@@ -4,6 +4,7 @@
 
 from ctypes import *
 from ctypes.test import need_symbol
+from _ctypes import CTYPES_MAX_ARGCOUNT
 import _ctypes_test
 
 class Callbacks(unittest.TestCase):
@@ -293,8 +294,6 @@ def test_callback_too_many_args(self):
         def func(*args):
             return len(args)
 
-        CTYPES_MAX_ARGCOUNT = 1024
-
         # valid call with nargs <= CTYPES_MAX_ARGCOUNT
         proto = CFUNCTYPE(c_int, *(c_int,) * CTYPES_MAX_ARGCOUNT)
         cb = proto(func)
diff --git a/Misc/NEWS.d/next/Library/2022-04-04-08-54-31.bpo-47208.cOh9xZ.rst b/Misc/NEWS.d/next/Library/2022-04-04-08-54-31.bpo-47208.cOh9xZ.rst
new file mode 100644
index 0000000..a5da321
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-04-04-08-54-31.bpo-47208.cOh9xZ.rst
@@ -0,0 +1 @@
+Allow vendors to override :const:`CTYPES_MAX_ARGCOUNT`.
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index 9177225..0415923 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -5781,6 +5781,7 @@ _ctypes_add_objects(PyObject *mod)
 #endif
     MOD_ADD("RTLD_LOCAL", PyLong_FromLong(RTLD_LOCAL));
     MOD_ADD("RTLD_GLOBAL", PyLong_FromLong(RTLD_GLOBAL));
+    MOD_ADD("CTYPES_MAX_ARGCOUNT", PyLong_FromLong(CTYPES_MAX_ARGCOUNT));
     MOD_ADD("ArgumentError", Py_NewRef(PyExc_ArgError));
     return 0;
 #undef MOD_ADD
diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h
index 0badb48..da1941c 100644
--- a/Modules/_ctypes/ctypes.h
+++ b/Modules/_ctypes/ctypes.h
@@ -18,7 +18,9 @@
  * This limit is enforced for the `alloca()` call in `_ctypes_callproc`,
  * to avoid allocating a massive buffer on the stack.
  */
-#define CTYPES_MAX_ARGCOUNT 1024
+#ifndef CTYPES_MAX_ARGCOUNT
+  #define CTYPES_MAX_ARGCOUNT 1024
+#endif
 
 typedef struct tagPyCArgObject PyCArgObject;
 typedef struct tagCDataObject CDataObject;