COMCOMENT参数
HINSTANCE /*hInstance*/
...
使用
UNREFERENCED_PARAMETER
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
UNREFERENCED_PARAMETER(hInstance);
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
UNREFERENCED_PARAMETER(nCmdShow);
我更喜欢评论参数。 宏未参考的_Parameter在winnt.h中定义,因此不携带。
如果以后您确实提到了它,则可能会忽略删除宏。Edit:使用C ++ 17,您现在可以使用[[and_unused]]属性。这对于代码很有用,具体取决于预处理器宏:
void foo( [[maybe_unused]] int value )
{
#ifdef USE_VALUE
useValue(value);
#endif
}
现在,即使USE_VALUE不确定,也不会警告。
我将命名版本视为第一个使用。混淆信息系统可能会有缺点,因此工具提示显示了残废的版本。 但是健康的人会使用名称在那里的声明。 (对于静态和一次性的东西,您不应该有未使用的参数,对吗?)
,这确实是口味问题。
C ++,两者都是处理和不直接引入任何不安全性的正确方法。但是,使用未参考的_Parameter可能会引起维护问题,因为如果将来在将来更新中使用了参数,则需要删除宏的使用,但是编译器不会警告这种情况。要审核宏的正确使用,开发人员必须手动检查参数仍未使用。
正如其他人指出的那样,跨平台可移植性也可能是一个问题。
Cin C,不可能删除参数名称;因此,宏是Windows平台上的合理解决方案,尤其是在Win32编程中。@not2qubit建议写答案,因此我正在尝试。 lile variant 1。(简单地禁用参数)更容易,它比变体2更隐含,因此可能混淆。
但它具有一种优势,它是语言建立的(而不是外部宏的消费)。在这种情况下,在这种情况下,我通常建议在各种代码环境中直接食用直接食用工具包(工具箱提供的/ - 稳定/ - 一致)功能的情况下的便携式(不希望!)。
在这种情况下,这里是
Win32WinMain()
(不是便携式),因此
Win32特异性应该很好。 sidey注意:我记得
clang[cl]在
win32
即使没有为其他平台定义,很容易为它们定义宏:
UNREFERENCED_PARAMETER
需要在所有平台上始终可用。在@millie Smith:虽然这很容易可行(而且还可以),但这是有问题的,因为
UNREFERENCED_PARAMETER
Win32
(而不是隐性/总是 - 此宏是“他们的”工具包属性/域...),但不是其他任何地方(明确的(void)
活动)。因此,一直很烦人的编译错误。因此,最好选择在all
平台上明确创建一个明确的“范围”/“命名”不同的宏名称。结果:解决编译错误不一致的雪崩烦恼已解决。