如何在 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();
}
类似于
#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();
}
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();
}
类似于
#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();
}