微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。