In my sketch I have the following:
#define HU_ADDR 0x190;
#define ALL_AUDIO_ADDR 0x1FF;
#define MY_ADDR 0x360;
#define UNKNOWN_ADDR 0xFFF;
typedef byte MessageID;
enum {
ACT_UNKNOWN,
ACT_POWERON,
ACT_POWEROFF,
ACT_PASSIVEOFF_0,
ACT_PASSIVEOFFRARE_0,
ACT_PASSIVEON_0,
ACT_KEYTURN,
ACT_PRESSDISC
};
struct MessageDef {
MessageID ID;
word MasterAddr;
word SlaveAddr;
byte PayloadLength;
byte Payload[20];
char Description[20];
};
MessageDef MessageTable[] = {
{ACT_POWERON, HU_ADDR, UNKNOWN_ADDR, 13, {0x00, 0x60, 0x31, 0xF1, 0x01, 0x01, 0x81, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00}, "On call"},
{ACT_POWEROFF, HU_ADDR, UNKNOWN_ADDR, 13, {0x00, 0x60, 0x31, 0xF1, 0x00, 0x00, 0x81, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00}, "off?"},
{ACT_PASSIVEOFF_0, HU_ADDR, UNKNOWN_ADDR, 3, {0x00, 0x11, 0x01}, "Passive: Weak"},
{ACT_PASSIVEOFFRARE_0, HU_ADDR, UNKNOWN_ADDR, 4, {0x00, 0x11, 0x01, 0x20}, "Passive: Strong"},
{ACT_PASSIVEON_0, HU_ADDR, UNKNOWN_ADDR, 16, {0x00, 0x74, 0x31, 0xF1, 0x80, 0x13, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x03, 0x03}, "On response"},
{ACT_KEYTURN, HU_ADDR, UNKNOWN_ADDR, 11, {0x31, 0x62, 0x31, 0xF1, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, "Key turned"},
{ACT_PRESSDISC, HU_ADDR, UNKNOWN_ADDR, 4, {0x00, 0x62, 0x31, 0x9F}, "DISC pressed"}
};
When I compile this, for some reason the Arduino IDE points at the first line and says "expected '}' before ';' token". If I replace the text like so:
#define HU_ADDR 0x190;
#define ALL_AUDIO_ADDR 0x1FF;
#define MY_ADDR 0x360;
#define UNKNOWN_ADDR 0xFFF;
typedef byte MessageID;
enum {
ACT_UNKNOWN,
ACT_POWERON,
ACT_POWEROFF,
ACT_PASSIVEOFF_0,
ACT_PASSIVEOFFRARE_0,
ACT_PASSIVEON_0,
ACT_KEYTURN,
ACT_PRESSDISC
};
struct MessageDef {
MessageID ID;
word MasterAddr;
word SlaveAddr;
byte PayloadLength;
byte Payload[20];
char Description[20];
};
MessageDef MessageTable[] = {
{ACT_POWERON, 0x190, 0xFFF, 13, {0x00, 0x60, 0x31, 0xF1, 0x01, 0x01, 0x81, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00}, "On call"},
{ACT_POWEROFF, 0x190, 0xFFF, 13, {0x00, 0x60, 0x31, 0xF1, 0x00, 0x00, 0x81, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00}, "off?"},
{ACT_PASSIVEOFF_0, 0x190, 0xFFF, 3, {0x00, 0x11, 0x01}, "Passive: Weak"},
{ACT_PASSIVEOFFRARE_0, 0x190, 0xFFF, 4, {0x00, 0x11, 0x01, 0x20}, "Passive: Strong"},
{ACT_PASSIVEON_0, 0x190, 0xFFF, 16, {0x00, 0x74, 0x31, 0xF1, 0x80, 0x13, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x03, 0x03}, "On response"},
{ACT_KEYTURN, 0x190, 0xFFF, 11, {0x31, 0x62, 0x31, 0xF1, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, "Key turned"},
{ACT_PRESSDISC, 0x190, 0xFFF, 4, {0x00, 0x62, 0x31, 0x9F}, "DISC pressed"}
};
Then it compiles with no complaints. ....what? Why? Aren't these functionally identical? Why does the compiler care if I use HU_ADDR instead of 0x190?
1 Answer 1
Don't put a semi-colon at the end of #define.
Whatever comes after #define NAME
will be used to replace NAME across the source code.
Explore related questions
See similar questions with these tags.