Gcc 仅在一次发生时抑制警告

Gcc 仅在一次发生时抑制警告,gcc,Gcc,我正在编写一些编译器不理解的操作系统代码,在我的一个函数中,我做到了: void kernel_getpid() { register unsigned int r0 asm("r0") = current_pid; } 因此,编译器抱怨: Warning: Variable "r0" is not used 如何仅在文件中的这一点禁用警告? 我通常希望有这些警告,所以我不想全局关闭它们,但在这一点上它变得烦人,因为我对此无能为力。从4.2版开始,但在4.6版之前,您可以使用

我正在编写一些编译器不理解的操作系统代码,在我的一个函数中,我做到了:

void kernel_getpid()
{
        register unsigned int r0 asm("r0") = current_pid;
}
因此,编译器抱怨:

Warning: Variable "r0" is not used
如何仅在文件中的这一点禁用警告?
我通常希望有这些警告,所以我不想全局关闭它们,但在这一点上它变得烦人,因为我对此无能为力。

从4.2版开始,但在4.6版之前,您可以使用以下内容。不幸的是,它从文件中的该点开始关闭警告

#pragma GCC diagnostic ignored "-Wunused-variable"
void kernel_getpid()
{
  register unsigned int r0 asm("r0") = current_pid;
}
对于版本4.6或更高版本,您可以推送和弹出诊断标志,因此您可以使用以下内容

void kernel_getpid()
{
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"

  register unsigned int r0 asm("r0") = current_pid;
}
#pragma GCC diagnostic pop

您可以在GCC或教程中阅读有关禁止GCC警告的更多详细信息。

Q:为什么不在assembler中完成完整的赋值?这是ARM,不是吗?当然这可能会解决这个特殊情况,但我想对这个问题有一个更一般的答案,因为这不是我第一次偶然发现这个问题。