A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/mcci-catena/arduino-lmic/issues/606 below:

this use of "defined" may not be portable [-Wexpansion-to-defined] · Issue #606 · mcci-catena/arduino-lmic · GitHub

Describe the bug

When compiling the ttn-otaa example with the current git master, and warnings enabled in the IDE, I get a ton of warnings like this one:

    /home/matthijs/docs/Electronics/Arduino/Sketches/libraries/mcci-lmic/src/lmic/config.h:22:5: warning: this use of "defined" may not be portable [-Wexpansion-to-defined]
 #if CFG_LMIC_REGION_MASK == 0
     ^~~~~~~~~~~~~~~~~~~~

I think this warning was added in a recent compiler upgrade.

This comes from this macro definition:

# define CFG_LMIC_REGION_MASK   \
                        ((defined(CFG_eu868) << LMIC_REGION_eu868) | \
                         (defined(CFG_us915) << LMIC_REGION_us915) | \
                         (defined(CFG_cn783) << LMIC_REGION_cn783) | \
                         (defined(CFG_eu433) << LMIC_REGION_eu433) | \
                         (defined(CFG_au915) << LMIC_REGION_au915) | \
                         (defined(CFG_cn490) << LMIC_REGION_cn490) | \
                         (defined(CFG_as923) << LMIC_REGION_as923) | \
                         (defined(CFG_kr920) << LMIC_REGION_kr920) | \
                         (defined(CFG_in866) << LMIC_REGION_in866) | \
                         0)

which, when used in an #if, gives non-portable behavior. It is easy to fix, though, I think something like this should be equivalent but without the warning:

# if  \
                        ((defined(CFG_eu868) << LMIC_REGION_eu868) | \
                         (defined(CFG_us915) << LMIC_REGION_us915) | \
                         (defined(CFG_cn783) << LMIC_REGION_cn783) | \
                         (defined(CFG_eu433) << LMIC_REGION_eu433) | \
                         (defined(CFG_au915) << LMIC_REGION_au915) | \
                         (defined(CFG_cn490) << LMIC_REGION_cn490) | \
                         (defined(CFG_as923) << LMIC_REGION_as923) | \
                         (defined(CFG_kr920) << LMIC_REGION_kr920) | \
                         (defined(CFG_in866) << LMIC_REGION_in866) | \
                         0)
# define CFG_LMIC_REGION_MASK 1
# else
# define CFG_LMIC_REGION_MASK 1
# endif

(haven't tested, though).

Similar warnings (with I presume similar fixes) happen for e.g. CFG_LMIC_EU_like and friends.

Environment

To Reproduce
Compile the ttn-otaa example with warnings enabled in the IDE preferences


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4