上升带有流语法的编译时错误消息

rise compile-time error message with stream syntax

本文关键字:编译时错误 消息 语法      更新时间:2023-10-16

如何在错误信息为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有帮助吗?

根据定义,编译时错误发生在编译过程中,要么是因为编译器不理解代码中的某些内容,要么是因为您使用预处理器指令(如#error)或静态断言static_assert ( bool_constexpr , message )指定了条件。

因此,如果你想在你的代码上运行检查,并使用cout写错误消息,你不能再调用结果编译时错误,因为用于检查它们的代码已经编译,错误本身因此是运行时错误。

你能写为什么#error不适合你吗?