2

下面是我用 gcc 4.9 编译的带有标志 -std=c++1y 的代码:

#include <stdio.h>
register unsigned long sp asm ("sp");
int main()
{
    printf("[%d] \n",((unsigned long)(sp) >= 5));
    return 0;
}

我得到的错误是“为'(sp)'注册的预期显式地址”。但是,没有 c++1y 标志,我没有收到错误消息。我无法获得有关标志的任何信息来抑制显示此问题的此功能或 c++14 功能。请任何人分享您的想法以解决此问题。

4

1 回答 1

2

出于某种原因(我不知道为什么),将括号括起来sp会导致 GCC 相信您想要变量的地址(这对于寄存器变量来说是不可能的),这对我来说似乎是一个错误,但可能是某种由于标准的某些奇怪部分而导致的故意行为。

您也不需要为您的变量强制转换。

此代码适用于-std=c++14

#include <cstdio>

register unsigned long sp asm ("sp");
int main()
{
        std::printf("[%d] \n", (sp >= 5));
        return 0;
}

这将1在我的机器上打印(因为您正在打印真值)。

于 2016-07-31T00:24:55.457 回答