c++visual-studio-2010compiler-optimization

Visual Studio 2010 O2 optimization give wrong result?


int listenPort()
{
    //if (server)
    //{
    //    return server->port();
    //}
    //std::cout << server->port() << std::endl;
    //return 0;

    //add below 2 lines only to make it work right under Realease.
    //std::fstream f("Z:/fsfasjlfjal.txt");
    //f.close();

    if (_listenPort != -1)
    {
        return _listenPort;
    }

    return 0;
}

I have one function named listenPort, variable _listenPort has been set to -1 in construct function, I want to check its value. When it changes return it or return 0.

I use Visual Studio 2010 to compile the code, DEBUG everything is OK. But when I change to Release(/O2), function always return 0. I tried add two lines code: fstream open and close. Now it seems everything is right.

But this solution is ugly, I just open and close some file. What should I do? Thanks.


Solution

  • One not recommended solution is to make replace int _listenPort; with volatile int _listenPort;. Read this to understand why this solution is not recommended.

    A good solution would use synchronized writing and reading of _listenPort.

    Or As I suggested before move definitions of class to a different file. This way, compiler won't inline your code and function will return expected value.