宏观意义在c ++中

ker*_*nel -1 c++ macros qt

我碰巧遇到了一个宏定义,如下面的c ++代码所示(https://github.com/LairdCP/UwTerminalX).

 #define SpeedModeInactive                 0b00
 #define SpeedModeRecv                     0b01
 #define SpeedModeSend                     0b10
 #define SpeedModeSendRecv                 0b11
Run Code Online (Sandbox Code Playgroud)

当我尝试使用visual studio 2010编译它时,它给我以下错误.

Error   14  error C2059: syntax error : ')' 
Run Code Online (Sandbox Code Playgroud)

这个宏是什么意思?宏的用法如下所示.

if ((gchSpeedTestMode == SpeedModeSendRecv || gchSpeedTestMode == SpeedModeRecv) && (gintSpeedBytesReceived10s > 0 || ui->edit_SpeedBytesRec10s->text().toInt() > 0))
{
    //Data has been received in the past 10 seconds: start a timer before stopping to catch the extra data packets
    gchSpeedTestMode = SpeedModeRecv;
    gtmrSpeedTestDelayTimer = new QTimer();
    gtmrSpeedTestDelayTimer->setSingleShot(true);
    connect(gtmrSpeedTestDelayTimer, SIGNAL(timeout()), this, SLOT(SpeedTestStopTimer()));
    gtmrSpeedTestDelayTimer->start(5000);

    //Show message that test will end soon
    ui->statusBar->showMessage("Waiting 5 seconds for packets to be received... Click cancel again to stop instantly.");
}
Run Code Online (Sandbox Code Playgroud)

小智 5

这是因为visual studio不能识别二进制值(从0bXXX开始),但是,您可以简单地将其定义为十六进制值:

#define SpeedModeInactive                 0x0
#define SpeedModeRecv                    0x1
#define SpeedModeSend                    0x2
#define SpeedModeSendRecv                0x3
Run Code Online (Sandbox Code Playgroud)

二进制文字的使用最初是在C++ 14中引入的,VS2010不支持,https: //en.wikipedia.org/wiki/C%2B%2B14#Binary_literals

  • @kernel:当然,但这还不包括时间旅行.这些C++ 14文字将适用于Visual Studio 2015及更高版本. (2认同)