Calling Python macro from ctypes
Peter Otten
__peter__ at web.de
Mon Aug 12 07:42:14 EDT 2013
Steven D'Aprano wrote:
> Is it possible to call a Python macro from ctypes? For example, Python
> 3.3 introduces some new macros for querying the internal representation
> of strings:
>
> http://www.python.org/dev/peps/pep-0393/#new-api
>
>
> So I try this in 3.3:
>
> py> import ctypes
> py> ctypes.pythonapi.PyUnicode_MAX_CHAR_VALUE
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "/usr/local/lib/python3.3/ctypes/__init__.py", line 366, in
> __getattr__
> func = self.__getitem__(name)
> File "/usr/local/lib/python3.3/ctypes/__init__.py", line 371, in
> __getitem__
> func = self._FuncPtr((name_or_ordinal, self))
> AttributeError: python3.3: undefined symbol: PyUnicode_MAX_CHAR_VALUE
That's not possible. It may look like a function, but a preprocessor
replaces the C macro in the C source before compilation. An example of very
bad usage of macros, just to drive the point home:
$ cat macro.c
#define IF(expr) if (expr) {
#define ENDIF ;}
main()
{
IF(1>0)
printf("It worked\n")
ENDIF
}
And here's what the compiler sees:
$ gcc -E -P macro.c
main()
{
if (1>0) {
printf("It worked\n")
;}
}
More information about the Python-list
mailing list