Author lemburg
Recipients belopolsky, lemburg
Date 2009-01-05.12:03:21
SpamBayes Score 0.202484
Marked as misclassified No
Message-id <4961F708.8080901@egenix.com>
In-reply-to <d38f5330901021938q43239b4fw349ac09d4e4bee47@mail.gmail.com>
Content
On 2009-01-03 04:38, Alexander Belopolsky wrote:
> Alexander Belopolsky <belopolsky@users.sourceforge.net> added the comment:
> 
> On Fri, Jan 2, 2009 at 10:54 AM, Marc-Andre Lemburg
> <report@bugs.python.org> wrote:
>> Marc-Andre Lemburg <mal@egenix.com> added the comment:
>>
>> Also note that by removing the extern "C" declarations, you not only
>> changes the exported symbol names of functions, but also those of
>> exported globals.
>>
> What are " exported globals" other than "exported symbol names of
> functions"?  AFAIK, C++ does not mangle non-function symbols.

GCC doesn't appear to do so, but there's no guarantee that other
C++ compilers won't touch these symbols:

http://en.wikipedia.org/wiki/Name_mangling

>> Those would also have to get declared in the header files, to prevent
>> their names from being mangled (causing the exported C API to change).
> 
> I believe .c files should only contain static functions and functions
> that are declared in an included header file.  If a function that is
> not advertised in a header, it is not part of API and it is a fair
> game to mangle it.  The only exception is the module init functions
> that are part of the ABI rather than API.

That's right, but I was referring to non-function globals.
These would have to be declared in the header files as well to
prevent their names from being mangled.

OTOH, those globals will often not be accessed directly from other
object files - only through functions providing an interface to
them. Still, this would have to be checked.
History
Date User Action Args
2009-01-05 12:03:23lemburgsetrecipients: + lemburg, belopolsky
2009-01-05 12:03:23lemburglinkissue4805 messages
2009-01-05 12:03:21lemburgcreate