Date: Mon, 30 Sep 2002 01:33:26 -0400 From: "Lyndon Griffin" <lyndon@bsd4us.org> To: freebsd-questions@freebsd.org Subject: C++ symbol mangling Message-ID: <20020930053326.18827.qmail@bsd4us.org>
next in thread | raw e-mail | index | archive | help
I'm involved in a porting project. I say that first because changing the code that I will list below is less of an option than it may seem. It's part of an API that third-party developers code to, my work on porting comes in secondary to changing the API. The code compiles as is, not even a warning, on win32 and linux. The environment is 4.6-STABLE, maybe a few weeks outta date, using the default GCC toolchain (2.95.3). Here's the code (well, a relevant representation, anyways). The example below is sufficient to reproduce the problem, at least. ------MyString.h------ class MyString { public: MyString(){}; ~MyString(){}; void toupper( void ); void tolower( void ); static char * toupper( char * ); static char * tolower( char * ); }; ------MyString.cpp----- #include "MyString.h" #include <ctype.h> char * MyString::toupper( char *s ) { char *t = s; while ( *t ) { *t = ::toupper( *t ); t++; } return ( s ); } char * MyString::tolower( char *s ) { char *t = s; while ( *t ) { *t = ::tolower( *t ); t++; } return ( s ); } Seems harmless enough, when looking at it... The trouble is that the preprocessor is changing the name of MyString::toupper() to MyString::__toupper (same for tolower), which is, of course, not declared in the class. This feels like the result of the compiler getting confused between the definition of toupper in ctype.h *and* in this program's source. The questions: 1) Are the ctype.h definitions getting in the way? 2) Is there a compiler flag to prevent this behavior? If so, what is it? 3) Barring the compiler flag, could someone architect for me a macro or two that would prevent this problem? Thanks mucho, <:) Lyndon http://bsd4us.org/ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020930053326.18827.qmail>