c ++如何在编译时创建自己的警告

时间:2013-01-28 08:36:30

标签: c++ visual-studio-2010 compilation compiler-errors static-assert

我想在编译时创建自己的警告,而不是在预处理器中创建(我已经看过几个答案) 假设我们有:

class A
{
private:
    explicit A(A const& other);
};

现在,如果用户执行:

A first;

然后:

A second(first);

他会得到一个错误,即构造的副本没有实现或者其他什么..请记住我的代码中有很多遗产...以及引用我的H文件A是否实现我试图使用复制构造函数...

所以..而不是编译器的默认警告我想创建自己的.... 像......“你不能使用复制构造函数”

帮助? 谢谢!

2 个答案:

答案 0 :(得分:2)

使用带有用户定义消息的static_assert将在编译期间触发此错误消息

class A
{
private:
    A() {}

    explicit A(A const& /* other */) 
    { 
        static_assert(false, "You cannot use copy constructor"); 
    }
};

int main()
{
    A first;    
    A second(first); // compile error
}

LiveWorkSpace

上的输出

注意这会产生错误,而不是警告。但是,几乎总是最好使用“警告为错误”编译器选项并明确(即记录注释)禁用您知道无害的警告。

答案 1 :(得分:1)

没有预处理器,只使用标准C ++,它是不真实的。您可以使用static_assert,但不会发出警告。