Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;检测是否声明了全局变量 是否可以使用SfayAe Boost或其他C++标准兼容的方法来检查特定变量是否在全局范围内声明? 这意味着不必事先声明宏来检查这一点,也不必使用特定于编译器的附加项,如MSVC的uu(如果存在)。类似GCC的弱符号声明也没有选择_C++ - Fatal编程技术网

C++;检测是否声明了全局变量 是否可以使用SfayAe Boost或其他C++标准兼容的方法来检查特定变量是否在全局范围内声明? 这意味着不必事先声明宏来检查这一点,也不必使用特定于编译器的附加项,如MSVC的uu(如果存在)。类似GCC的弱符号声明也没有选择

C++;检测是否声明了全局变量 是否可以使用SfayAe Boost或其他C++标准兼容的方法来检查特定变量是否在全局范围内声明? 这意味着不必事先声明宏来检查这一点,也不必使用特定于编译器的附加项,如MSVC的uu(如果存在)。类似GCC的弱符号声明也没有选择,c++,C++,使用C++11或更早版本的解决方案将非常适合我。也欢迎其他解决办法 附言:可以假设变量的类型是已知的 背景: 我目前正试图以一种通用的方式瞄准许多不同的Arduino平台。我知道特殊引脚声明为静态常数8\u t,但我不知道是否声明了例如SDA1或仅声明了SDA。为了支持较新的目标,而不必每次编写新的板定义,我希望检查给定的一组可能的管脚,并在声明时支持这些管脚。这在ArduinoIDE中应该是开箱即用的,因此不应该使用特定于编译器的特性、额外的程序或其他奇特的添加。我知道,对于这些变量中的大多数

使用C++11或更早版本的解决方案将非常适合我。也欢迎其他解决办法

附言:可以假设变量的类型是已知的

背景:
我目前正试图以一种通用的方式瞄准许多不同的Arduino平台。我知道特殊引脚声明为
静态常数8\u t
,但我不知道是否声明了例如
SDA1
或仅声明了
SDA
。为了支持较新的目标,而不必每次编写新的板定义,我希望检查给定的一组可能的管脚,并在声明时支持这些管脚。这在ArduinoIDE中应该是开箱即用的,因此不应该使用特定于编译器的特性、额外的程序或其他奇特的添加。我知道,对于这些变量中的大多数,也有一个宏声明,它指示存在的变量。然而,在我看来,更干净的解决方案是直接检查pin变量是否已声明,因为宏名称往往是特定于目标的,而pin变量名称和声明看起来相当稳定。当然,正确的解决方案是实施命名约定和宏定义以支持此类检查。然而,把这个想法推广到所有Arduino核心项目的努力对我来说太多了


p.p.S:请不要仅仅因为这是一个xy问题而否决投票或对此发表评论。我的例子只是众多例子中的一个。任何其他API(如多库目标项目)也可以使用这种解决方案。即使是一个明确的“不,那是不可能的”也至少可以节省大量的时间来搜索这样的解决方案。

我认为您最好使用构建步骤来解决这个问题,例如一个配置脚本,它尝试使用所讨论的全局变量编译代码。然后,它可以确定构建是失败还是成功,并定义适当的makros来处理代码中有问题的情况。

感谢您的想法。我知道这基本上就是多目标库和程序所做的,例如使用配置脚本或CMake。遗憾的是,目前的Arduino IDE中没有包含这样一个选项,如OP中所述。您不需要使用IDE。你可以在没有IDE的情况下使用它的编译器。我知道这对我来说是可行的,但对很多其他用户来说可能不是那么好。