A Usage of C Macro

For some reason, I need to understand the following code.

 

Header File

 

# include/unicodeobject.h from python source code
#ifndef Py_UNICODE_WIDE
// other code
# define PyUnicode_Decode PyUnicodeUCS2_Decode
// other code
#else
// other code
# define PyUnicode_Decode PyUnicodeUCS4_Decode
// other code
#endif

 

Source File

 

# Objects/unicodeobject.c
// other code
PyObject *PyUnicode_Decode(const char *s,
                           Py_ssize_t size,
                           const char *encoding,
                           const char *errors)
{
// other code
}
// other code

 At first sight, I am confused. Why to define a macro against some thing undefined such as Unicode_Decode PyUnicodeUCS2_Decode and PyUnicodeUCS4_Decode? After some thinking, I find that this macro is used to export method names conditionally in the library created for these source files. If Py_UNICODE_WIDE is undefined, PyUnicodeUCS2_Decode is exported. Otherwise, PyUnicodeUCS4_Decode is exported. There is no a method called Unicode_Decode since it will be replaced after preprocessing.

你可能感兴趣的:(C++,c,python,C#)