首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

尝试理解C++中Arduino中的#杂注区域的用法

在C++中,#杂注区域(也称为预处理器指令)是一种特殊的语法结构,用于在编译之前对源代码进行预处理。#杂注区域以井号(#)开头,后面跟着一个预处理指令。

在Arduino中,#杂注区域的用法如下:

  1. 包含库文件:可以使用#include指令在#杂注区域中包含所需的库文件。例如,如果要使用Arduino的Wire库,可以在#杂注区域中添加#include <Wire.h>,以便在编译时将该库文件包含到源代码中。
  2. 定义常量:可以使用#define指令在#杂注区域中定义常量。例如,可以使用#define LED_PIN 13来定义一个名为LED_PIN的常量,它的值为13。这样,在源代码中可以直接使用LED_PIN代替数字13。
  3. 条件编译:可以使用#if、#ifdef、#ifndef、#elif和#endif等指令在#杂注区域中进行条件编译。这些指令可以根据条件判断是否编译某段代码。例如,可以使用#ifdef指令检查是否定义了某个宏,如果定义了,则编译某段代码。
  4. 警告和错误消息:可以使用#warning和#error指令在#杂注区域中生成警告和错误消息。这些消息将在编译时显示,用于提醒开发者注意潜在的问题或错误。
  5. 其他预处理指令:还可以使用其他预处理指令,如#undef、#pragma等,在#杂注区域中进行一些特殊的操作。

总结起来,#杂注区域在C++中的用法主要包括包含库文件、定义常量、条件编译、生成警告和错误消息等。在Arduino中,#杂注区域常用于包含所需的库文件和定义常量,以便在编译时进行预处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++中this指针的理解和用法

个人理解: (ps:class类就好比这座房子,this就好比一把钥匙,通过钥匙来打开了这座房子的门,那么里面的东西就随意你取用了) this是指向实例化对象本身时候的一个指针,里面存储的是对象本身的地址...因为this作用域是在类的内部,自己声明一个类的时候,还不知道实例化对象的名字,所以用this来使用对象变量的自身。...在非静态成员函数中,编译器在编译的时候加上this作为隐含形参,通过this来访问各个成员(即使你没有写上this指针)。...例如a.fun(1)fun(&a,1) this的使用:1)在类的非静态成员函数中返回对象的本身时候,直接用return *this(常用于操作符重载和赋值、拷贝等函数)。...,即将point1对象的地址传递给了this指针 b.编译器编译后的原型应该是void MovePoint(Point *this, int a, int b) c.在函数体中可以写成{this->x

67830
  • C++中typename的用法

    前言 最近在看STL源码剖析时,遇到关于typename的用法,平常接触到的只是在定义模板参数时使用,直到遇到这个问题我才彻底的查找了typename的用法。...typename的常规用法 typename在C++类模板或者函数模板中经常使用的关键字,此时作用和class相同,只是定义模板参数;在下面的例子中,该函数实现泛型交换数据,即交换两个数据的内容...:修饰类型 在介绍第二个用法之前先了解下一些基本概念,限定名和非限定名 限定名(qualified name),是限定了命名空间的名称。...,比如int,vector之类基类列表中,比如template class C1 : T::InnerType不能在T::InnerType前面加typename构造函数的初始化列表中...如果类型是依赖于模板参数的限定名,那么在它之前必须加typename(除非是基类列表,或者在类的初始化成员列表中)。。

    3.2K30

    c++ 中__declspec 的用法

    c++ 中__declspec 的用法 语法说明: __declspec ( extended-decl-modifier-seq ) 扩展修饰符: 1:align(#)    用__...具体用法未见到。 6....,但是只用在纯虚接口类,因此这样的不能够被自己实例话.它阻止编译器初始化虚表指针在构造和析构类的时候,这将移除对关联到类的虚表的 引用.如果你尝试这实例化一个有novtable关键字的类,它将发生AV(...access violation)错误.C++里virtual的缺陷就是vtable会增大代码的尺寸,在不需要实例化的类或者纯虚接口的时候,用这个关键字可以减 小代码的大小....__declspec(thread)的前缀是Microsoft添加给Visual C++编译器的一个修改符。它告诉编译器,对应的变量应该放入可执行文件或DLL文件中它的自己的节中。

    3.4K70

    C++ 中 & 的多种用法

    int *ptr = &var; 中的&var就是取var变量的地址int age = 30;int &ref_age = age; // ref_age是age的引用,改变ref_age等同于改变age...例如,int &ref_age = age; 中的&是用来声明ref_age是一个引用,它引用的是age变量void increment(int &num) { num++;}int z = 5;...increment(z); // z的值现在变为6用法③:作为参数传递,在函数的参数列表中,使用&可以声明引用参数,这个函数体内形参发生变化实参也会随之改变#include class...和externalValue是同一个值的不同引用 return 0;}用法④:在C++11及以后的版本中,可以在类的构造函数初始化列表中使用引用,以此来初始化类的引用类型成员变量。...0011int c = a & b; // c的结果为1 (二进制0001)用法⑥:位与运算符,在表达式中,当&两边都是整数时,它作为位与运算符,对两个操作数的每一位执行逻辑与操作​

    25200

    C++中的STL中map用法详解

    ,下面在例子中详细说明它们的用法#include #include #include using namespace std;...,也是STL的特性,删除区间是一个前闭后开的集合 //自个加上遍历代码,打印输出吧 } 10、map中的swap用法map中的swap不是一个容器中的元素交换,而是两个容器所有元素的交换...11、排序 ·  map中的sort问题map中的元素是自动按Key升序排序,所以不能对map用sort函数;这里要讲的是一点比较高深的用法了,排序问题,STL中默认是采用小于号来排序的,以上代码在排序上是不存在任何问题的...,map的很多用法都和STL中其它的东西结合在一起,比如在排序上,这里默认用的是小于号,即less,如果要从大到小排序呢,这里涉及到的东西很多,在此无法一一加以说明。...(标示红黑的,相当于平衡二叉树中的平衡因子),我想大家应该知道,这些地方 很费内存了吧,不说了……12、   map的基本操作函数:     C++ maps是一种关联式容器,包含“关键字/值”对 begin

    3.1K20

    C++中的指针用法汇集

    1、指向对象的指针   定义:对象空间的起始地址就是对象的指针。   ...说明:在建立对象时,编译系统就为每个对象分配一定的存储空间以存放其成员,不过注意,在一般情况下不同对象的数据存储单元中存放的数据成员是不相同,而不同对象的函数代码却是相同的,也就是说,它们的函数代码是共享的...定义指向类对象的指针变量的一般形式是:   类名 *对象指针名;   如对于与个Time类对象,我们可以有: Time t; Time *p; p=&t;   我们就可以通过对象指针访问对象和对象的成员...,假如所定义的类中有数据成员hour、minute、sec,成员函数有gettime(),则 (*p).hour 即为p指向对象中的hour成员,相当于t.hour (*p).gettime() 即为p...指向对象中的成员函数gettime(),相当于t.gettime()   也可以用如下形式: p->hour 和 p->gettime()和上面是等价的。

    13410

    全面理解python中self的用法

    at 0x000000000284E080>-------------------------------------------------从上面的例子中可以很明显的看出...t.x,也就是说是Test类的实例t的属性x,由于实例t中并没有定义属性x,所以找到了类属性x,而该属性是描述符属性,为Desc类的实例而已,所以此处并没有顶用Test的任何方法。...,所以在描述符类中存在第二个参数ins,用来表示调用它的类实例,所以t.x时可以看到第三行中的运行结果中第二项为。...从OO的本质理解python中的self 假设要对用户的数据进行操作,用户的数据包含name和age。如果用面向过程的话,实现出来是下面这样子的。...之所以可以在类中的各个地方访问数据,本质就是绑定了self这个东西,它方法的第一个参数,可以不叫self,叫其它名字,self只不过是个约定。 下面是面向对象的实现,可以看到,结构化多了,清晰可读。

    12.2K10

    JavaScript中的asyncawait的用法和理解

    昨天更新的是“JavaScript中的Promise使用详解”,其实也就是说了下基本用法和自己对Promise的理解,可能有错误之处,也欢迎指出。...今天就说一说“JavaScript中的async/await的用法和理解” 编程语言中任意一个关键字都是有意义的,我们先从字面意思来理解。 1.async ?...async 是“异步”的简写,带async关键字的函数,是声明异步函数,返回值是promise对象,如果async关键字函数返回的不是promise,会自动用Promise.resolve()包装。...await 可以认为是 async wait 的简写。所以应该很好理解 async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。...如果它等到的不是一个 Promise 对象,那 await 表达式的运算结果就是它等到的东西。

    1.2K1413

    【C++】C++ 类中的 this 指针用法 ① ( C++ 类中的 this 指针引入 | this 指针用法 | 代码示例 )

    一、C++ 类中的 this 指针 1、C++ 类中的 this 指针引入 在 C++ 类中 , this 指针 是一个特殊的指针 , 由系统自动生成 , 不需要手动声明定义 , 在类中的每个 非静态成员函数..., 因此 this 指针是类内部使用的指针 , 使用 this 可以访问 实例对象 中 的所有 公有 public / 保护 protected / 私有 private 成员 ; 2、C++ 类中的...this 指针用法 C++ 类中的 this 指针用法 : 使用 this 作为指针 : 在 非静态成员函数 中 , 直接使用 this 作为 本实例对象 的指针 ; this 使用 this-> 访问成员变量...: 在 非静态成员函数 中 , 直接使用如下语法 , 访问 本实例对象 中的 非静态成员变量 ; this->成员变量名 *使用 (this)....访问成员变量 : 在 非静态成员函数 中 , 直接使用如下语法 , 访问 本实例对象 中的 非静态成员变量 ; 先获取指针指向的数据 然后访问数据中的成员变量 ; (*this).成员变量名 在 C++

    33820

    如何理解 C++ 中的 atomic?

    在 C++ 中,std::atomic 是一个模板类,用于实现原子操作。原子操作是指在多线程环境中,这些操作是不可分割的,即它们在执行过程中不会被其他线程中断。...基本概念原子性:原子操作是不可分割的,即在多线程环境中,这些操作要么完全执行,要么完全不执行,不会被其他线程中断。可见性:原子操作确保对变量的修改在所有线程中都是立即可见的。...顺序一致性:原子操作可以保证内存操作的顺序一致性,即所有线程看到的操作顺序是一致的。2. 主要用途同步:在多线程环境中,std::atomic 可以用于同步变量的状态,确保多个线程之间的数据一致性。...exchange:交换原子变量的值和给定的值,并返回旧值。...main:创建两个线程,每个线程调用 incrementCounter 函数,最后输出计数器的最终值。6. 总结原子操作:std::atomic 提供了原子操作,确保在多线程环境中操作的不可分割性。

    8500

    C 语言 C++ 中 assert 的用法

    来源:公众号(c语言与cpp编程) 断言assert原型 void assert(int expression); assert宏的原型定义在中,其作用是先计算表达式expression...,就像我们上面的代码改变了i变量,在实际编写代码的过程中是不能这样做的; 例如: assert(i++ < 100) 不好:这是因为如果出错,比如在执行之前i=100,那么这条语句就不会执行,那么i++...保持原信息内容不变 nNewSize<=0表示清除缓冲区 assert(nNewSize >= 0); assert(nNewSize <= MAX_BUFFER_SIZE); ... } 在我们使用C语言/C+...+做工程项目时,如果我们能在代码中合理的使用assert,能使我们创建更稳定、质量更好且不易于出错的代码;当需要在一个值为FALSE时中断当前操作的话就可以使用断言。...单元测试必须使用断言;另外除了类型检查和单元测试外,断言还提供了一种确定各种特性是否在程序中得到维护的极好的方法;

    3K00

    C++中set的用法学习

    Set是C++ STL(标准模板库)的一个容器类,它用于存储不同的值,并且可以按照特定顺序进行访问和操作。...Set是C++ STL(标准模板库)的一个容器类,它用于存储不同的值,并且可以按照特定顺序进行访问和操作。Set是一种基于红黑树实现的关联容器,也就是说它的元素按照固定的顺序排列,且每个元素都唯一。...在添加元素的同时,也会保证集合中的元素不重复,就是说如果在Set中已经包含了该元素,那么新加入的数据将不会被插入到Set中。...,可以遍历Set中的所有元素。...C++ Set还提供了其他的常见操作,例如:find():查找Set中是否包含指定元素并返回该元素的迭代器,若没有找到则返回end()。size():返回Set中元素的个数。

    44200

    C语言 | C++中assert的用法

    断言assert原型 void assert(int expression); assert宏的原型定义在中,其作用是先计算表达式expression的值为假(即为0),那么它就先向...不能使用改变环境的语句,就像我们上面的代码改变了i变量,在实际编写代码的过程中是不能这样做的; 例如: assert(i++ < 100) 不好:这是因为如果出错,比如在执行之前i=100,那么这条语句就不会执行...保持原信息内容不变 nNewSize<=0表示清除缓冲区 assert(nNewSize >= 0); assert(nNewSize <= MAX_BUFFER_SIZE); ... } 在我们使用C语言/C+...+做工程项目时,如果我们能在代码中合理的使用assert,能使我们创建更稳定、质量更好且不易于出错的代码;当需要在一个值为FALSE时中断当前操作的话就可以使用断言。...单元测试必须使用断言;另外除了类型检查和单元测试外,断言还提供了一种确定各种特性是否在程序中得到维护的极好的方法;

    1.8K88

    C++ 中的getline()函数用法详解

    遇到了要输入一行字符串的操作,我想除了fgets()的方法(fgets()用法链接),getline()也是可以的,但是我对getline的操作不熟悉,便查阅了很多资料,发现都说的很模糊...,借这个机会我想彻底理清楚getline的用法; 网上有说getline有两种用法的,我在这总结一下, 一、getline()用的比较多的用法 1) istream& getline (istream...cin.getline()是将字符串存储在字符数组当中,也可以读取空格,也可以自己设置结束符标志 —————————————————————————————————————————————————————— 在日常使用中我们经常需要将...} 那么在这个例子中是不是我们输入了一个回车就会跳出循环呢,答案是否定的,while只会检测cin的输入是否合法,那么什么时候会跳出循环呢,只有1.输入EOF,2.输入到了文件末尾 例2: string...} 在这个例子中,逗号运算符的作用就是将最后一个式子作为判定的条件,即while判断的是str !

    5.6K21
    领券