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") ;} } -- http://mail.python.org/mailman/listinfo/python-list