c++ - 使用流语法增加编译时错误消息

标签 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 会有帮助吗?

最佳答案

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

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

你能写下为什么#error 不能为你解决问题吗?

关于c++ - 使用流语法增加编译时错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39437336/

相关文章:

c++ - malloc:对象 0x7fff5fbff350 的 *** 错误:未分配正在释放的指针

list - Haskell : Parse error in case statement (involving lists!)

node.js - 关于不兼容类型的 Typescript 编译器错误

c++ - constexpr 的目的

c++ - 错误 : expected primary-expression before 'char'

c++ - boost 程序选项在从命令行读取时更改数据(这是 boost 中的错误吗?)

c++ - 关于可以链接到 C++ 的语言

c - 在大型项目上运行 Clang-Tidy

ios - ERROR ITMS-90432 : Invalid Swift Support. 有解决办法吗?

php - 无法打开流没有此类文件或目录