2

以下は、フラグ-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 機能に関する情報を取得できませんでした。この問題を解決するために、どなたかご意見をお聞かせください。

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 に答える