开源硬件
Arduino
客制化键盘
Arduino_寄存器
二进制运算
寄存器+二进制运算
LCD-逐字显示
密码依次录入
等待输入
WiFi Duck(无线击键注入攻击平台)
WiFi Duc-New
WiFi Duc-Old
蓝牙无线烧录
ESP8266
ESP-NOW
ESP8266看门狗
ESP8266-休眠模式
ESP01/01S使用说明
WIFI_SD
ESP8266-Web服务器
ESP8266-WIFI自动认证
ESP32
ESP32 ADC2
ESP32_PWM
ESP32_CAM
ESP32 小坦克
ESP32_限电保护
Arduino IDE 添加 ESP32
ESP32-iPhone BLE攻击
STM32
STM32F103-虚拟键盘
STC
STC8G1K08(A)
树莓派-触摸屏
Arduino IDE
Arduino_自制库
Arduino库收集
常见排序算法
冒泡排序
选择排序
插入排序
希尔排序
归并排序
快速排序
计数排序
预处理
millis(运行时长)
Arduino IDE 2.X-修改数据位置
Mixly
Mixly安装教程
Mixly 模块介绍
Mixly-添加ESP32CAM支持
Mixly-库定制工具
模块
4G模块连接物联网
GPS模块
语音模块(JQ8900)
安信可VB语音识别
28BYJ-48(5V步进)
FreeRTOS
FreeRTOS-多任务基础
FreeRTOS-任务共享全局变量
FreeRTOS-多核多任务
FreeRTOS-MUTEX
FreeRTOS-常规程序改多任务
FreeRTOS-定时器
LaserGRBL(激光雕刻)
LaserGRBL-GRBL
GRBL-CNC Shield v4
MicroPython
Scratch
Wokwi(在线仿真)
html转无符号数组
待做开源项目
本文档使用 MrDoc 发布
-
+
首页
预处理
## 多 .ino 自动合并 Arduino IDE 在编译的时候会自动把项目文件夹下所有 `.ino` 文件全部合并成一个进行编译,但是要注意的是 `void loop() 和 void setup() 有且只能出现一次,这两个可以分布在不同文件` ## include include(包含),可以引用其他 `.h` 文件,因为不是C++语句结尾不需要 `;` ```c++ #include "library.h" // 本地引用,引用的文件在项目文件夹下 #include <library.h> // 全局引用,使用已添加库 ``` ## define 如:`#define LEDPIN 13` define(定义,宏 micro),编译前 IDE 会自动把 `LEDPIN` 全部替换为 `13` 这个对字符串是没有影响的,只对变量名称有效 `#define` 之间的顺序是无关紧要的,执行到该条就会替换所有 ```c++ // 常见使用,使用宏定义参数 // #define <宏> <替换内容> #define LEDPIN 23 #define pi 3.1415926 // 可以为小数 #define NAME "Lonely Binary" // 也可以为字符串 #define VAR score // 指代其他变量名也是可以 // 取消宏 // #undef <宏> #undef LEDPIN // 执行取消宏后面的内容不会再收到这个宏影响 // 宏 micro // #define <宏> <宏内容> #define AREA(r) pi*r*r // 微函数,计算圆面积 AREA(10) // 直径10的圆面积 #define MIN(a,b) (a<b ? a:b) // 微函数,最小值比较 // (a<b ? a:b),这个是一个判断,a<b 为真返回:前面的,为假返回:后面的 MIN(20,10) // 返回20,10的最小值 // '#' 的妙用 #define TOSTR(x) #x // 在该宏中x是带入参数,#x会自动在外层加上双引号 Serial.println(TOSTR(has 'a' "dream")) // 会打印出所见内容,而不需要管内容中引号的转义 #define TOSTR(x) "Lonely Binary "#x // 还可以在前/后加上内容 Serial.println(TOSTR(has 'a' "dream")) // 打印内容:Lonely Binary has 'a' "dream" // '##' 的妙用 #define CONCAT(a,b) a##b // 合并,把a、b两个部分合并成一个变量名 Serial.println(CONCAT(score,AVG)) // 打印的内容就是 scoreAVG 这个变量的 ``` ## #if #ifdef #ifndef #else #elif #endif - #if <判断>,编译预处理中的条件命令,相当于C语法中的if语句 - #ifdef <宏>,判断是否 定义了 该宏,宏名称要大写 - #ifndef <宏>,判断是否 没有定义 该宏,宏名称要大写 - #else,#if、#ifdef、#ifndef若这些条件不满足,则执行#else之后的语句,相当于C语法中的else - #elif,#if、#ifdef、#ifndef、前面的#elif,相当于C语法中的else if - #endif,#if、#ifdef、#ifndef这些条件命令的结束标志 ```c++ // 防头文件重复引用 #ifndef EXTRA_H // 如果没有定义该宏则执行以下内容 #define EXTRA_H // 定义一下宏,防止后面再次引用 ...代码... #endif // 结束,已上包含均受该宏影响 // 跨平台适应 #define ARDUINO // 根据我们所定义的当前平台来决定执行以下什么代码 #if (defined ESP32) || (defined ESP8266) // 判断是否是 ESP32/ESP8266平台 vTaskDelay(3000); // 执行 ESP32/ESP8266 适配的代码 #elif (defined ARDUINO) // 如果是 Arduino平台 delay(3000); // 执行 Arduino 适配的代码 #else // 如果都不是 Serail.println("UNSUPPORTED BOARD"); // 提示一下 #endif // 结束 // Debug 调试 #define DEBUG 0 // 是否启用 Debug #if DEBUG // 判断是否启用 Serial.println("Debug Info"); // 启用后输出相关所要显示内容 #endif // 结束 ``` **相关内容视频** [如何将源文件分割到多个文件并且组合在一起 预处理 incluce](https://www.bilibili.com/video/BV13Y4y1z7c5) [预处理define的用法 以及特殊符号#和##](https://www.bilibili.com/video/BV1x34y177vP) [预处理条件判断的经典三种用法 #if #ifndef #elif #endif](https://www.bilibili.com/video/BV1rS4y1q7J5)
造物者W
2022年6月8日 19:40
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码