分享
三行代码  ›  专栏  ›  技术社区  ›  dangerman

(void)的意思是什么

c++
  •  0
  • dangerman  · 技术社区  · 6 天前

    我们的代码有这样一行:

    #define UNREFERENCED_PARAMETER(_p) (void) (_p)
    
    STATUS RequestHandler(Request *request)
    {
        UNREFERENCED_PARAMETER(request);
        ...
        return 0;
    }
    

    我不知道未引用的参数是什么意思,为什么要把'request'翻译成'(void)(request)'

    谢谢!:)

    1 回复  |  直到 6 天前
        1
  •  2
  •   463035818_is_not_a_number    6 天前

    int main()
    {
        int x = 0;
    }
    

    gcc -Werror -Wall 出现错误:

    <source>: In function 'int main()':
    <source>:3:9: error: unused variable 'x' [-Werror=unused-variable]
        3 |     int x = 0;
          |         ^
    cc1plus: all warnings being treated as errors
    ASM generation compiler returned: 1
    <source>: In function 'int main()':
    <source>:3:9: error: unused variable 'x' [-Werror=unused-variable]
        3 |     int x = 0;
          |         ^
    cc1plus: all warnings being treated as errors
    

    让这种警告(在这里被视为错误)安静下来的老式方法是写

    int main()
    {
        int x = 0;
        (void)(x);
    }
    

    但是,由于C++17中有一个属性 [maybe-unused] . 不幸的是 gcc still produces an error with -Wall -Werror 为此:

    int main()
    {
        [[maybe_ununsed]] int x = 0;
    }
    

    我假设gcc有这样一个设置,可以编译它而不产生错误,同时仍然将其他警告视为错误,尽管看起来像 (void)(x) 仍然有它的位置。