使用流语法

时间:2016-09-11 14:53:56

标签: c++ compiler-errors

如何在错误消息使用std::cout等语法的情况下引发编译时错误消息?

例如,

int main(void){
    int i = 14;
    int condition = 0;
    if (condition == 0){
        #error "no, " << i << " won't work.";
    }
}

应该提供类似

的错误消息
"test.cpp:5: error: no, 14 won't work."

在编译程序期间,就像g ++的#error或c ++ 11的static_assert(false, "err_message");一样。

在上面的例子中,变量i“的值应该在实际运行程序之前知道......

我需要的实际地点是:

我有一个带有静态尺寸的多维数组。我想提出一个编译器时间错误,它也提到了多维数组的维度(例如3x4x5)。

我想要一个std::cout类似于错误消息的流语法,因为cout可以轻松地连接数字和字符串。我认为#error无法连接数字和字符串。

constexpr有帮助吗?

1 个答案:

答案 0 :(得分:1)

根据定义,编译期间会出现编译时错误,原因可能是编译器没有理解代码中的某些内容,或者因为您使用预处理器指令(如#error或静态断言{{1})指定了条件}。

因此,如果要运行检查代码并使用static_assert ( bool_constexpr , message )编写错误消息,则无法再调用结果编译时错误,因为用于检查它们的代码已经编译,因此错误本身就会运行时间错误。

请你写一下为什么#nror不会为你做这个伎俩?