理解C版本宏(看起来像未声明的变量?)

问题描述 投票:0回答:2

我碰巧读过

ArduinoJson/version.hpp
,其中包含以下宏:

#define ARDUINOJSON_VERSION_MACRO V701

现在,我是一名 Python 开发人员,对 ctypes(gen) 的 C 语言有非常基本的了解。 对我来说,看起来

V701
是一个未声明的变量,但这绝对是故意的。

谁能给我解释一下这是怎么回事?这样做的目的是什么?为什么该值不加引号?

python c macros arduinojson
2个回答
0
投票

您定义了一个宏,其中字符串 ARDUINOJSON_VERSION_MACRO 将在编译代码之前由 c 预处理器替换源中的 V701。


0
投票

它本身不用作值。在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
的值的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.