定义的宏无法识别

Defined macro not recognized

本文关键字:识别 定义      更新时间:2023-10-16

我在Eclipse项目中有以下代码

#pragma once
#ifdef WIN32 // Compiler enters here !
    #define M_PI 3.14159265358979323846
#else
    #include <cmath>
#endif
#ifndef INFINITY
    #define INFINITY FLT_MAX
#endif
inline float Radians(float deg)
{
    return ((float)M_PI/180.f) * deg;
}

问题是我从编译器中得到了以下错误

Luzoso.hpp:22:20: error: 'M_PI' was not declared in this scope
     return ((float)M_PI/180.f) * deg;

我不明白可能是什么问题。我用ECLIPSE CDT4 - MinGW Makefiles作为生成器,用CMake构建了这个项目。有什么建议吗?

WIN32不是正确的宏。实际上是_WIN32。无论哪种方式,这都是Visual Studio C++定义的宏,但您使用的是MinGW,因此要检查的实际宏是__MINGW32__或(64)。这仍然是错误的做法,因为MSDN需要:

#define _USE_MATH_DEFINES // for C++
#include <cmath>

为了访问数学常量。MinGW已经这样做了。