News:

As usual while waiting for the next release - don't forget to check the nightly builds in the forum.

Main Menu

Question about wx_str() and c_str()

Started by ollydbg, October 08, 2009, 02:50:05 AM

Previous topic - Next topic

ollydbg

There are many code in the current trunk like below:

            #if wxCHECK_VERSION(2, 9, 0)
                Manager::Get()->GetLogManager()->DebugLog(F(_T("Looking for type: '%s' (%d components)"), actual.wx_str(), type_components.size()));
            #else
                Manager::Get()->GetLogManager()->DebugLog(F(_T("Looking for type: '%s' (%d components)"), actual.c_str(), type_components.size()));
            #endif


After checking the wxWidgets header file(Windows)
D:\wxWidgets-2.8.10\include\wx\string.h

I find this statement:


    const wxChar* wx_str()  const { return c_str(); }


So, I just manually change above code to below( remove the preprocessor  guard)

                Manager::Get()->GetLogManager()->DebugLog(F(_T("Looking for type: '%s' (%d components)"), actual.wx_str(), type_components.size()));


It builds and works with no problem.

So, my question is: why not clean up these codes?
Thanks.



If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

MortenMacFly

Quote from: ollydbg on October 08, 2009, 02:50:05 AM

   const wxChar* wx_str()  const { return c_str(); }

This was added late to wxWidgets v2.8.10. If you remove the other option it'll break compilation of C::B on platforms where not the "latest" a.k.a v2.8.10 version of wxWidgets is available.

However, the cleanup will be done sooner or later...
Compiler logging: Settings->Compiler & Debugger->tab "Other"->Compiler logging="Full command line"
C::B Manual: [url="https://www.codeblocks.org/docs/main_codeblocks_en.html"]https://www.codeblocks.org/docs/main_codeblocks_en.html[/url]
C::B FAQ: [url="https://wiki.codeblocks.org/index.php?title=FAQ"]https://wiki.codeblocks.org/index.php?title=FAQ[/url]

ollydbg

Quote from: MortenMacFly on October 08, 2009, 07:09:38 AM
Quote from: ollydbg on October 08, 2009, 02:50:05 AM

   const wxChar* wx_str()  const { return c_str(); }

This was added late to wxWidgets v2.8.10. If you remove the other option it'll break compilation of C::B on platforms where not the "latest" a.k.a v2.8.10 version of wxWidgets is available.

However, the cleanup will be done sooner or later...

I see, thanks!!
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

stahta01

#3
Quote from: MortenMacFly on October 08, 2009, 07:09:38 AM
Quote from: ollydbg on October 08, 2009, 02:50:05 AM

   const wxChar* wx_str()  const { return c_str(); }

This was added late to wxWidgets v2.8.10. If you remove the other option it'll break compilation of C::B on platforms where not the "latest" a.k.a v2.8.10 version of wxWidgets is available.

However, the cleanup will be done sooner or later...

I added the unneeded guard per an C::B dev request to get the patches applied.

The wx_str() has been in wxWidgets for years; but, it was obsoleted years ago.
Therefore, the was no wxWidgets docs saying it was safe to use.

From wxWidgets 2.8.0

   // identical to c_str(), for wxWin 1.6x compatibility
   const wxChar* wx_str()  const { return c_str(); }


Tim S.


C Programmer working to learn more about C++.
On Windows 10 64 bit and Windows 11 64 bit.
--
When in doubt, read the CB WiKi FAQ. [url="http://wiki.codeblocks.org"]http://wiki.codeblocks.org[/url]

ollydbg

Quote from: stahta01 on October 08, 2009, 02:12:55 PM
I added the unneeded guard per an C::B dev request to get the patches applied.
:D
Sorry, I can't understand, what does this sentence mean?
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

stahta01

#5
Quote from: ollydbg on October 08, 2009, 02:25:11 PM
Quote from: stahta01 on October 08, 2009, 02:12:55 PM
I added the unneeded guard per an C::B dev request to get the patches applied.
:D
Sorry, I can't understand, what does this sentence mean?

The Code::Blocks person said add the guard (#ifdef/else/endif) and he would apply the patch.
http://forums.next.codeblocks.org/index.php/topic,10510.msg72130.html#msg72130
http://forums.next.codeblocks.org/index.php/topic,10510.msg72132.html#msg72132

I added the patch that was NOT needed. He applied the patch.

Tim S.
C Programmer working to learn more about C++.
On Windows 10 64 bit and Windows 11 64 bit.
--
When in doubt, read the CB WiKi FAQ. [url="http://wiki.codeblocks.org"]http://wiki.codeblocks.org[/url]

ollydbg

Quote from: stahta01 on October 08, 2009, 02:51:41 PM
I added the patch that was NOT needed. He applied the patch.
Tim S.

Ok,I know.
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.