original) (raw)
(On Wed, May 22, 2013 at 9:18 PM, Carlos Nepomuceno <carlosnepomuceno@outlook.com> wrote:
Eli\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
\> From: eliben@gmail.com
\[...\]
> I've found the following declaration in 'Objects/stringobject.c' but itlol I can see clearly now! :p
\> just defines \_Py\_InsertThousandsGrouping() as
\> \_PyString\_InsertThousandsGrouping():
\>
\> "#define \_Py\_InsertThousandsGrouping \_PyString\_InsertThousandsGrouping"
\>
\> I'm looking for the opposite!
\>
\> No, you aren't :-)
\>
\> #define \_Py\_InsertThousandsGrouping \_PyString\_InsertThousandsGrouping
\> #include "stringlib/localeutil.h"
\>
\> Now look inside "stringlib/localeutil.h" and think what the
\> pre-processor does with the function definition having the #define
\> above.
\>
\> Eli
That reminds me of "Which came first, the chicken or the egg?"
Thank you! Somehow I got intrigued by such use...
Do you know why they've put a lot of source code inside the header files?
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
This depends per use-case. Commonly, code is placed in header files in C to achieve some sort of C++-template-like behavior with the preprocessor. In particular, I think Objects/stringlib/formatter.h� does this. Note this comment near its top:
/* Before including this, you must include either:
�� stringlib/unicodedefs.h
�� stringlib/stringdefs.h
�� Also, you should define the names:
�� FORMAT_STRING
�� FORMAT_LONG
�� FORMAT_FLOAT
�� FORMAT_COMPLEX
�� to be whatever you want the public names of these functions to
�� be.� These are the only non-static functions defined here.
*/