ArduinoJson/version.hpp
,其中包含以下宏:
#define ARDUINOJSON_VERSION_MACRO V701
现在,我是一名 Python 开发人员,对 ctypes(gen) 的 C 语言有非常基本的了解。 对我来说,看起来
V701
是一个未声明的变量,但这绝对是故意的。
谁能给我解释一下这是怎么回事?这样做的目的是什么?为什么该值不加引号?
您定义了一个宏,其中字符串 ARDUINOJSON_VERSION_MACRO 将在编译代码之前由 c 预处理器替换源中的 V701。
它本身不用作值。在Namespace.hpp中,你可以找到用法:
# define ARDUINOJSON_VERSION_NAMESPACE \
ARDUINOJSON_CONCAT4(ARDUINOJSON_VERSION_MACRO, \
ARDUINOJSON_BIN2ALPHA(ARDUINOJSON_ENABLE_PROGMEM, \
ARDUINOJSON_USE_LONG_LONG, \
ARDUINOJSON_USE_DOUBLE, 1), \
ARDUINOJSON_BIN2ALPHA(ARDUINOJSON_ENABLE_NAN, \
ARDUINOJSON_ENABLE_INFINITY, \
ARDUINOJSON_ENABLE_COMMENTS, \
ARDUINOJSON_DECODE_UNICODE), \
ARDUINOJSON_SLOT_ID_SIZE)
然后搜索
ARDUINO_JSON_CONCAT4
的定义,你会发现:
#define ARDUINOJSON_CONCAT_(A, B) A##B
#define ARDUINOJSON_CONCAT2(A, B) ARDUINOJSON_CONCAT_(A, B)
#define ARDUINOJSON_CONCAT4(A, B, C, D) \
ARDUINOJSON_CONCAT2(ARDUINOJSON_CONCAT2(A, B), ARDUINOJSON_CONCAT2(C, D))
所以它最终会被用在token粘贴中,所以它会成为
ARDUINOJSON_VERSION_NAMESPACE
的值的一部分。