gpt4 book ai didi

c++ - 寄存器、c++14 和 gcc 的编译错误

转载 作者:搜寻专家 更新时间:2023-10-31 02:15:18 27 4
gpt4 key购买 nike

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

#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 功能的任何信息。请任何人分享您的想法以解决此问题。

最佳答案

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

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

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

#include <cstdio>

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

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

关于c++ - 寄存器、c++14 和 gcc 的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38679576/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com