C++ 如何生成编译时错误?

C++ 如何生成编译时错误?,c++,C++,我希望能够做到以下几点: void f(int*p = nullptr) { if (!p) { //HERE I WOULD LIKE TO HAVE AN MSG THAT WOULD BE DISPLAYED DURING COMPILATION AS A WARNING POSSIBLY } } 大多数编译器支持和预处理器指令 不过,微软的编译器使用了而不是#warning谷歌#if#endif和#error预处理器指令。根据编译时不可用的变量值生成编译错

我希望能够做到以下几点:

   void f(int*p = nullptr)
    {
    if (!p)
{
//HERE I WOULD LIKE TO HAVE AN MSG THAT WOULD BE DISPLAYED DURING COMPILATION AS A WARNING POSSIBLY
}
    }
大多数编译器支持和预处理器指令


不过,微软的编译器使用了而不是
#warning

谷歌
#if
#endif
#error
预处理器指令。根据编译时不可用的变量值生成编译错误是不可能的,所以忘掉它吧。使用
assert()
根据运行时检查生成编译时警告,只需创建一个名为“warning.c”的文件,其中包含一个未使用的变量声明。然后,您可以生成如下警告:

void f(int *p = nullptr) {
    if (!p) {
        system("gcc -Wall warning.c");
    }
}

正确的答案是:您试图做的事情永远不会起作用。

您希望在编译时发出警告,这取决于运行时发生的事情?一般来说,这是不可能的。也许你想要一些稍微不同的东西,我们可以帮助你?请详细说明您试图解决的问题:)为什么函数会提供非法的默认参数
nullptr
?这太没意义了,不是吗?:)@FredOverflow-如果您从以下角度来看,这不是指针:根据策略,此函数使用指针传递或nullptr;运行)@这里:你还没有回答一个基本的问题:如何为运行时发生的事情生成一个编译器错误?如果它没有默认参数,如果你试图调用它而没有参数,你会得到一个编译器错误。这很有趣,回答了这个问题<代码>系统(“cat int c;>/tmp/warning.c&&gcc-Wall/tmp/warning.c&&rm/tmp/warning.c”)-不妨提供:)我确实使用了Visual Studio,我也尝试过使用“布拉格消息”,但由于一些奇怪的原因,它对我不起作用。@There
#布拉格消息(“blah”)
对我起作用已经超过10年了。如果这对你不起作用,你就做错了。