在Keil MDK-ARM C++11中,成员和函数参数的*默认NAN值*生成奇怪的错误



下一个代码

时,您是否遇到过另一个Keil的"特性"
#include <cmath>
struct AB {
  float f=NAN;
  float foo(float a=NAN);
};

生成下一个构建输出:

compiling main.cpp...
....srcmain.cpp(24): error:  #65: expected a ";"
    float foo(float a=
AN);
....srcmain.cpp(24): error:  #109: expression preceding parentheses of apparent call must have (pointer-to-) function type
        float foo(float a=NAN);
....srcmain.cpp(24): error:  #18: expected a ")"
        float foo(float a=NAN);
....srcmain.cpp(24): error:  #18: expected a ")"
        float foo(float a=NAN);
....srcmain.cpp(23): error:  #65: expected a ";"
        float f=NAN;
....srcmain.cpp: 0 warnings, 5 errors`

对我来说,它看起来像虫子。我从来没有在GCC和其他编译器中遇到过同样的麻烦。

2行5个错误太棒了。WTF ?MDK-ARM无法解析NAN .
这可以通过下一行来修复:

#define __ESCAPE__(__x)  (__x)

最好只针对这个"很酷的"编译器:

#ifdef __CC_ARM
 #define __ESCAPE__(__x)  (__x)
#endif

另一个解决方案(不确定,但它可能是编译器的扩展):

float f = 0f_7FC00000;

最新更新