2016-10-01 611 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;