2016-10-01 605 views
0

你曾经面临着另一个Keil的“功能”时,下面的代码在Keil的MDK-ARM C++ 11 *默认NAN值*为会员和函数的参数生成

#include <cmath> 
struct AB { 
    float f=NAN; 
    float foo(float a=NAN); 
}; 

产生下一个奇怪的错误建立输出:

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

对于我来说,它看起来像错误。我从未在GCC和其他编译器遇到同样的麻烦。

回答

0

5个错误在2行中。太棒了。 WTF? MDK-ARM无法解析NAN
这可能是固定的下一行:

#define __ESCAPE__(__x) (__x) 

更好的使之成为仅此 “” 编译:

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

另一种解决方案(不知道,但它可能是编译器的扩展名):

float f = 0f_7FC00000;