如何在 clang 中为一行禁用 -Wvexing-parse?

How to disable -Wvexing-parse for one line in clang?

Clang 默认启用 -Wvexing-parse,这是一件好事。

然而,有时我想声明一个函数(f())在另一个函数(g())的范围内作为g() 是唯一需要注意的函数 f().

有没有办法通过对特定行的注释来告诉 clang“我的意思是声明一个函数”?

示例:

#include <iostream>

// header file
int g()
{
    const char *f(); //HOW TO clang-disable-vexing-parse?
    std::cout << f() << std::endl;    
}

// cpp file
const char *f()
{
    return "";
}

// main.cpp
int main()
{
    g();
}

(Online example).

类似于

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wvexing-parse"

const char *f(); 

#pragma clang diagnostic pop
std::cout << f() << std::endl; 

应该做你想做的。

但是如果您将函数 f() 正确地 声明为不带参数的函数(因此 f(void)),实际上没有必要禁用警告并且应该达到同样的效果。

#include <iostream>

// header file
int g(void)
{
    const char *f(void); //HOW TO clang-disable-vexing-parse?
    std::cout << f() << std::endl;    
}

// cpp file
const char *f(void)
{
   return "";
}

// main.cpp
int main()
{
   g();
}