使用未参考的_Parameter宏观 我在Visual Studio上使用\ W4警告级别,我正在编写Windows程序。 Int Winapi Winmain(Hinstance Hinstance,Hinstance Hprevinstance,LPSTR LPCMDLine,int ncmdshow) 所有这些参数...

问题描述 投票:0回答:4
我知道有两种处理方法:

COMCOMENT参数
HINSTANCE /*hInstance*/
...

使用

UNREFERENCED_PARAMETER
  1. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER(hInstance); UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); UNREFERENCED_PARAMETER(nCmdShow);
    
    
  2. 哪个是正确的?哪一个更安全?使用宏有任何问题吗?

    我更喜欢评论参数。
    
    

    宏未参考的_Parameter在winnt.h中定义,因此不携带。
    如果以后您确实提到了它,则可能会忽略删除宏。
    
    
    Edit:使用C ++ 17,您现在可以使用[[and_unused]]属性。这对于代码很有用,具体取决于预处理器宏:
void foo( [[maybe_unused]] int value ) { #ifdef USE_VALUE useValue(value); #endif }

现在,即使USE_VALUE不确定,也不会警告。
c++ visual-studio parameters macros compiler-warnings
4个回答
14
投票

我将命名版本视为第一个使用。混淆信息系统可能会有缺点,因此工具提示显示了残废的版本。 但是健康的人会使用名称在那里的声明。 (对于静态和一次性的东西,您不应该有未使用的参数,对吗?)

,这确实是口味问题。

C ++,两者都是处理和不直接引入任何不安全性的正确方法。但是,使用未参考的_Parameter可能会引起维护问题,因为如果将来在将来更新中使用了参数,则需要删除宏的使用,但是编译器不会警告这种情况。要审核宏的正确使用,开发人员必须手动检查参数仍未使用。

正如其他人指出的那样,跨平台可移植性也可能是一个问题。

Cin C,不可能删除参数名称;因此,宏是Windows平台上的合理解决方案,尤其是在Win32编程中。

@not2qubit建议写答案,因此我正在尝试。 lile variant 1。(简单地禁用参数)更容易,它比变体2更隐含,因此可能混淆。

但它具有一种优势,它是语言建立的(而不是外部宏的消费)。

5
投票
宏未参考的_Parameter在winnt.h中定义,因此不携带。

在这种情况下,在这种情况下,我通常建议在各种代码环境中直接食用直接食用工具包(工具箱提供的/ - 稳定/ - 一致)功能的情况下的便携式(不希望!)。

在这种情况下,这里是

Win32

4
投票
WinMain()

(不是便携式),因此

Win32

特异性应该很好。 sidey注意:我记得

clang[cl]

win32

0
投票
当需要滚动自己的宏时,最好不要占据现有的宏名称,而是选择自己的明显范围范围/命名变体:

即使没有为其他平台定义,很容易为它们定义宏:

UNREFERENCED_PARAMETER

@millie Smith:虽然这很容易可行(而且还可以),但这是有问题的,因为

UNREFERENCED_PARAMETER
需要在所有平台上始终可用。在

Win32

(而不是隐性/总是 - 此宏是“他们的”工具包属性/域...),但不是其他任何地方(明确的

(void)活动)。因此,一直很烦人的编译错误。因此,最好选择在all

平台上明确创建一个明确的“范围”/“命名”不同的宏名称。结果:解决编译错误不一致的雪崩烦恼已解决。
    
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.