首页 > 解决方案 > 如何在clang中为一行禁用-Wvexing-parse?

问题描述

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();
}

在线示例)。

标签: c++clang++

解决方案


类似的东西

#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();
}

推荐阅读