我在編譯 ESP8266 的 Arduino 程式時, 遇到一個莫名其妙的事情, 底下這行程式碼一直遇到編譯錯誤:
double _N; //-- Number of samples
錯誤訊息如下:
expected unqualified-id before numeric constant
想說, 奇怪, 這裡哪來的數值常數?找了一下才發現, 原來 ESP8266 Arduino Core 中 ctype.h 定義了 _N 為 04, 如下:
#define _U 01
#define _L 02
#define _N 04
#define _S 010
#define _P 020
#define _C 040
#define _X 0100
#define _B 0200
所以如果你的程式中使用到了 _N, 就會變前處理器取代成 04, 我的那一行程式就變成:
double 04; //-- Number of samples
自然無法編譯成功了。要注意的是, 除了我碰到的 _N 外, 還有許多已經被 ctype.h 事先定義的名稱, 如果你遇到的奇怪的編譯結果, 可以到原始碼找看看, 可能你也跟我一樣遇到類似的情況, 解決的方法最簡單的就是更改自己的程式變數名稱, 避免和 ESP8266 Arduino Core 中的名稱衝突。
沒有留言:
張貼留言