msvc 相当于 __attribute__((unused)) 用于函数、参数和局部变量 功能警告参数和变量警告

问题描述

问题

在 Cython 实现中,一个通用宏用于抑制未使用的警告。

# define CYTHON_UNUSED __attribute__ ((__unused__))

用于抑制有关未使用函数的警告:

CYTHON_UNUSED int func(int arg)

未使用的参数:

int func(CYTHON_UNUSED int arg)

和未使用的局部变量:

CYTHON_UNUSED int var;

由于 msvc 不存在 __attribute__ ((__unused__)),我试图为 msvc 提出解决方案。我想出的解决方案是使用 __pragma(warning(suppress: 4100 4101 4505)) 作为等价物来抑制警告。但是,这可能会抑制多个警告。以下代码

CYTHON_UNUSED int func(int arg1,int arg2) {
    int var;
    return 0;
}

不仅会抑制关于未使用函数的警告,还会抑制关于参数的两个警告和关于变量的警告。

我目前的解决方

功能警告

对于函数警告可以使用 __pragma(warning(suppress: 4505)),除非有人编写如下内容,否则它会起作用:

static CYTHON_UNUSED  int func() { return 0; }
static int func2() { return 0; }

仍然会忽略这两个警告。

参数和变量警告

对于变量和参数警告,我没有找到比强制转换为 void 更好的解决方案:

int var;
(void)var;

问题

是否有其他方法可以使用 MSVC 实现此目的? 该解决方案具有以下要求:

  • 必须同时使用 C 和 C++
  • 应该只抑制一个警告
  • 如果有多种方法可以实现这一点,则最好对当前语法进行尽可能少的更改。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)