C++ Visual Studio相当于c+中的gcc属性(未使用)+;11(或更低)?

C++ Visual Studio相当于c+中的gcc属性(未使用)+;11(或更低)?,c++,visual-studio,c++11,visual-studio-2017,C++,Visual Studio,C++11,Visual Studio 2017,我正在尝试编写一个宏,以便在用户需要时使用“抑制未使用的变量警告”(例如,在尚未实现整个类的派生类中)。我知道我可以删除变量名。。。但为了清楚起见,我更喜欢宏) 到目前为止,我有: #ifdef WIN32 #define UNUSED(x) x #else #define x __attribute__((unused)) #endif 用法如下: void test\u fn(int UNUSED(test\u var)){…} 我看到了这篇文章:,但它给了我一个我无法真正

我正在尝试编写一个宏,以便在用户需要时使用“抑制未使用的变量警告”(例如,在尚未实现整个类的派生类中)。我知道我可以删除变量名。。。但为了清楚起见,我更喜欢宏)

到目前为止,我有:

#ifdef WIN32
    #define UNUSED(x) x
#else
    #define x __attribute__((unused))
#endif
用法如下:

void test\u fn(int UNUSED(test\u var)){…}

我看到了这篇文章:,但它给了我一个我无法真正使用的结果(多行pragmas)

所以我的问题是,是否有一个MSVS等价于
\uuuuu属性(未使用))
i、 在同一条线上

注意:这个问题并没有回答我要问的问题:因为它不包括如何在函数原型中以一种既适用于MSV又适用于gcc的方式使用它。

如果您的使用仅限于

void test_fn(int UNUSED(test_var)) {...}
我知道我可以删除变量名。。。但为了清楚起见,我更喜欢宏)

因此,通过宏删除变量名:

你可以和我一起去

#define UNUSED(x) /*Empty*/

如果变量或函数参数可能未使用,则设计为抑制任何有关该变量或函数参数的警告

现在,如果您想要便携设备,有多种选择:

  • 如果你不使用它,
  • 这是一个函数参数,只是不要命名它
  • 否则,就不要创建它
  • 如果它可能在某些情况下使用,只需通过强制转换到
    void
    ,明确使用一次:

    (void)potentially_unused;
    
    是的,第二个选项不在原型中,但必须考虑

  • 升级到C++17并使用


  • 如果没有包含在中,则应该添加到那里。如果您因为尚未实现整个类而收到警告,则可能会重复此警告,我将很高兴保留此警告,而不会冒险忘记稍后执行此警告。@ShafikYaghmour我将在那里添加答案…如果我知道的话:)@Aconcagua no,这里不是dup,因为这些答案不符合我的要求。注意:我在代码中未使用的函数参数中使用了未使用的(x),因此空心铸造等。。。不起作用。我也读过那篇帖子:)是的,这就是我想要的!。。。事实上,这可能对gcc和MSV都有效:)谢谢。只是想。。。另外一个好处是,当您想使用变量时,必须删除未使用的(..)部分,否则会出现编译错误。。。很好……:)我的问题是,是否最好将其发布在中,并将其作为副本关闭?@code\u fodder“没有一个是经过设计的”——准确地说:不命名参数是标准的,甚至在C++11()之前就已经存在了-如果您直接这样做或使用宏来获得效果是不相关的…此解决方案的优点是它甚至可以在C中工作,但仅适用于声明(在定义中,参数必须命名)。因此,如果您碰巧编写了一个与C兼容的头文件(即
    \ifdef\ucplusplus extern“C”
    之类),您仍然可以使用这个技巧。。。