0
我正在用C++編寫一個Arduino草圖。我希望用戶能夠在sketch.ino文件中直接生成#define
常量,這將用於編譯代碼。 Arduino IDE使用g ++編譯器。如何全局#定義一個預處理器變量?
假設我們有三個文件:
sketch.ino
sketch.h
sketch.cpp
在sketch.h我定義
#define OPTION_1 0
#define OPTION_2 1
#define OPTION_3 2
#define OPTION_4 3
#define SLOW 0
#define FAST 1
在sketch.ino用戶然後定義MYOPTION:
#define MYOPTION OPTION_2
在草圖.h我使用變量來定義宏:
#if MYOPTION == OPTION_1 | MYOPTION == OPTION_2
#define SPEED FAST
#else
#define SPEED SLOW
#endif
在sketch.cpp我用它來提高時間關鍵代碼:
MyClass::foo() {
// do something
#if SPEED == FAST
// do more
#if MYOPTION == OPTION_2
// do something extra
#endif
#endif
#if MYOPTION == OPTION_4
// do something else
#endif
}
可惜MYOPTION的定義似乎並不裏面sketch.cpp得到認可。 Hower sketch.cpp確實可以識別在sketch.h中定義的變量。有沒有一種方法可以在全局範圍內定義預處理器變量,因此可以在任何使用它們的文件中訪問它們?
優化的好處在於你使用的'g ++'編譯器?你可能想要所有這些前處理器垃圾,並讓你的編譯器照顧它,因爲使用帶有'enum'的標準'if'可以做到所有這一切,而且整個過程不那麼糟糕。通常最好使用'const'而不是'#define'。 – tadman
@tadman預處理器無法優化我的代碼。該代碼旨在根據所附的硬件進行定製。用戶提供的選項決定了該硬件所需的時間關鍵功能的哪些部分。由於(本例中)Arduino Due的內存限制,提供多種功能是沒有意義的。 – uzumaki
'MYOPTION'的定義看起來可疑,等號。 –