Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未使用变量警告,即使在IF语句中显式使用它_C++_Gcc_G++_C++17 - Fatal编程技术网

C++ 未使用变量警告,即使在IF语句中显式使用它

C++ 未使用变量警告,即使在IF语句中显式使用它,c++,gcc,g++,c++17,C++,Gcc,G++,C++17,我试图创建(使用C++17)一个简单的调试头,如果启用了标记LOGGER\u debug\u MODE,它只执行一些代码行。这就是我的头的定义方式(我也尝试使用{x;}而不是x,但警告仍然存在): 调试.h 我包含了debug.h,在代码的某个地方,我调用宏函数R\u debug来打印一些值: 记录器adc.cpp 提前谢谢 您有一个定义静态bool LOGGER\u DEBUG\u MODE=true的头。如果将该头包含在多个C++文件中,那么每个文件将得到它自己的Boo../P>的副本。 在

我试图创建(使用C++17)一个简单的调试头,如果启用了标记LOGGER\u debug\u MODE,它只执行一些代码行。这就是我的头的定义方式(我也尝试使用{x;}而不是x,但警告仍然存在):

调试.h

我包含了debug.h,在代码的某个地方,我调用宏函数R\u debug来打印一些值:

记录器adc.cpp


提前谢谢

您有一个定义
静态bool LOGGER\u DEBUG\u MODE=true的头。如果将该头包含在多个C++文件中,那么每个文件将得到它自己的Boo../P>的副本。
在main.cpp中,您没有使用
R\u DEBUG
,因此该bool的副本(可能来自include
logger\u adc.h
)确实未在该文件中使用

可能的解决办法是:

你应该这样做,所以你只有一个BoL拷贝(在代码中用“代码>外部代码< /代码>声明它”,并在一个C++文件中定义它。

使用生成定义而不是运行时检查


etc

作为一个与您的问题相关的一般提示:如果可能,不要尝试通过静态(const)变量构建控制流。如果需要编译时切换(这里看起来是实际情况),如果可能,只在这里使用编译时方案(从C++17开始使用ifdefs或constexpr).
\define\u HDEBUG
该名称是为语言实现保留的。通过定义,您的程序将具有未定义的行为。您应该为宏使用另一个名称。@eerorika将其更改为
\u HLOGGERDEBUG
,谢谢!@LucasVaz该名称也是保留的。您应该选择另一个名称。@eerorika zzzzz,将其更改为
_HDATALOGGERSIGMADEBUG
。如果这是保留的,我就放弃了。我认为静态变量已经在对象之间共享了,这解释了很多。因此它将成为类似于头中的
extern bool LOGGER\u DEBUG\u MODE;
和主中的
bool LOGGER\u DEBUG\u MODE=true;
(例如)静态是C++中的一个重载项。在类中,在该类的所有实例之间确实共享了<代码>静态< /COD>变量。作为一个全局变量,<代码> static < /C> >它的本地到C++文件(技术翻译单元)解释静态的3种不同用途:“我忘记函数局部静力学:-”
#ifndef _HDEBUG

    #define _HDEBUG

    static bool LOGGER_DEBUG_MODE = true;
    #define R_DEBUG(x) if(LOGGER_DEBUG_MODE == true) x
    
#endif
double anlg_device_t::eval_formula()
{
    double result = -9999;

    try
    {
        result = parser.Eval();
    }
    catch (mu::Parser::exception_type &e)
    {
        std::cout << e.GetMsg() << std::endl;
    }

    R_DEBUG(std::cout << "Eval Result: " << result << std::endl);

    return result;
}
double anlg_device_t::eval_formula()
{
    double result = -9999;

    try
    {
        result = parser.Eval();
    }
    catch (mu::Parser::exception_type &e)
    {
        std::cout << e.GetMsg() << std::endl;
    }

    if(LOGGER_DEBUG_MODE == true) std::cout << "Eval Result: " << result << std::endl;

    return result;
}
#include "logger_adc.h"

int main()
{
    anlg_device_t test (ADC_CHIP_1, 1, 18, 1, 1, true);
    test.set_formula("2*x","x", test.get_voltage_ptr());

    std::cout << "Test Voltage: " << test.get_voltage() << std::endl << "Test Relative: " << test.get_relative() << std::endl;

    std::cout << "Test Formula (2*x): " << test.eval_formula() << std::endl;


    return 0;
}