#在C中定义一个元组

2023-11-24

我希望能够定义一个元组来表示其他宏所需的参数。

我认为展示我想要的最好方法是展示一个例子:

#include <avr/io.h>

#define LED_PORT PORTB
#define LED_DDR  DDRB
#define LED_PIN  PB7
#define LED      LED_PORT, LED_DDR, LED_PIN

#define OUTPUT(port, ddr, pin) ddr |= 1 << pin

void main(void) {
    OUTPUT(LED);
}

I want OUTPUT(LED)然后扩展为:

LED_DDR |= 1 << LED_PIN

我遇到的问题与扩展顺序有关,并导致以下错误:

宏“OUTPUT”需要 3 个参数,但只给出 1 个

这适用于具有自定义构建硬件的 AVR 项目,其中我定义了LED和其他组件具有各自的LED_PORT LED_DDR and LED_PIN.

然后,我想定义更多可以采用此 LED 的宏,并使用适当的参数来映射到最简洁的方式。

使用标准 C 预处理器可以实现这一点吗?


您可以向宏添加一个间接级别来实现此目的:

#define OUTPUT_I(port, ddr, pin) ddr |= 1 << pin
#define OUTPUT(spec) OUTPUT_I(spec)

在重新扫描期间,spec之前已展开OUTPUT_I, 所以OUTPUT_I宏看到三个参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

#在C中定义一个元组 的相关文章

随机推荐

  • 是否可以在 google protobuf 中定义类型(枚举或消息)的别名?

    我的原型文件中有两个枚举 它们定义了几乎相同的值 是否可以删除其中一个并保留别名以保持所有代码正常工作 Example enum A a 0 b 1 enum B a 0 b 1 我想要在 C 中有类似 typedef 的东西 enum A
  • 为什么 Firefox 渲染的虚线边框彼此不对齐?

    http betawww helpcurenow org about financial accountability http blog helpcurenow org 我使用的设计包含大量 1px 虚线边框 我注意到 Firefox 中
  • getBooleanExtra() 仅使用默认参数,而不使用 putExtra() 传递的参数

    这是代码 在这一部分中 answerIsTrue变量应该初始化为 true 它正确地执行了 我调试和检查 并且也正确地传递到 putExtra 再次 我调试和检查 mCheatButton setOnClickListener new Vi
  • 如何利用纬度/经度数据进行有效的范围搜索+计数?

    我正在处理由纬度 经度对表示的大量点 这些点不一定是唯一的 该集中可能有多个点位于同一位置 这些点存储在数据库中 我需要做的是找出一种有效执行搜索的方法 以获取任意点给定半径 例如 25 英里 内的点数 计数不需要 100 准确 更重要的是
  • 如何编写全屏 Linux 控制台应用程序/脚本?

    我什至很难用谷歌搜索这个 因为我不知道正确的关键字 一些命令行应用程序 例如 vi 和 less 接管整个控制台屏幕并向用户呈现交互式界面 退出此类应用程序后 屏幕将返回到应用程序启动之前的状态 我想编写一个以这种方式运行的程序 但同样 我
  • 在半尺寸父控制器中呈现模态视图控制器

    我试图在大小为一半父视图控制器的其他视图控制器上呈现模态视图控制器 但它始终以全屏视图显示 我在故事板中创建了具有固定帧大小的自由大小的视图控制器 320 250 var storyboard UIStoryboard name Main
  • 如何确定旅行商问题的起点和终点?

    我有一个求解器可以解决正常的对称 TSP 问题 该解决方案意味着经过所有节点的最短路径 并且不限制哪些节点是路径中的第一个和最后一个节点 有没有办法转化问题 保证一个特定的节点作为起始节点 另一个节点作为结束节点 一种方法是将 I 非常大的
  • 在 Dask DataFrame.apply() 上,在处理实际行之前接收 n 行值 1

    在下面的代码片段中 我希望日志打印数字 0 4 我知道数字可能不是按这个顺序 因为任务将被分解为多个并行操作 代码片段 from dask import dataframe as dd import numpy as np import p
  • 使用 Hyper 显示响应正文仅显示正文的大小

    我尝试使用 Hyper 将 URL 的内容 正文 显示为文本 extern crate hyper use hyper client Client use std io Read fn main let client Client new
  • PostgreSQL 将数据库存储在哪里?

    PostgreSQL 数据库的文件存储在哪里 要查看数据目录所在的位置 请使用此查询 show data directory 要查看所有运行时参数 请使用 show all 您可以创建表空间来在文件系统的其他部分存储数据库对象 要查看可能不
  • 删除 Fetch API 默认超时

    我使用 Google Chrome 或 Mozilla Firefox 的本机获取向我的服务器发送查询 fetch url method POST body formData credentials include 我设置了一个服务器在 3
  • 在 ElasticSearch 中返回部分嵌套文档

    我想搜索嵌套文档数组并仅返回符合特定条件的文档 映射示例如下 book properties title type string chapters type nested properties title type string lengt
  • angularjs:只允许在文本框中输入数字

    在 AngularJS 中 是否有任何可用功能只允许在文本框中输入数字like 此代码显示了如何防止输入非数字符号的示例 angular module app directive onlyDigits function return res
  • 问:回调的调用顺序是否与注册的顺序相同?

    我正在使用Q承诺图书馆 我的代码依赖于这样一个事实 单个 Promise 的回调按照注册的顺序执行 http jsfiddle net HgYtK 1 var deferred Q defer var promise deferred pr
  • android:name 中的前导点真的需要吗? [复制]

    这个问题在这里已经有答案了 可能的重复 注册活动时的 点 是什么意思 在所有 Android 示例中 活动 服务等名称均以点开头
  • 查看设备方向是否已锁定(检测是否启用/禁用自动旋转)

    如何查明设备的屏幕方向是否已锁定 我正在使用 OrientationEventListener 来触发我的应用程序内的一些操作 如果用户锁定了屏幕 我想禁用这些操作 我知道我通常可以这样定位 但如何找出这个锁定方向 int orientat
  • 神秘的形式(function(x){})$x

    物体是什么formals function x x 它存在于函数的形式中 绑定到没有默认值的参数 还有其他方法来引用这个奇怪的对象吗 除了表示空函数参数之外 它还有其他作用吗 以下是可以在控制台中检查的一些属性 gt is formals
  • Android 和桌面上 Java 下的 SVG 处理

    我正在尝试编写一个基于 XML 文件生成 SVG 图像的 Java 应用程序 该应用程序还应该能够显示 SVG 文件 我的应用程序应该在 Android 平台和台式电脑上运行 我读到过有关 Swing Batik 的内容 但据我所知 它在
  • Objective-C 中自定义对象的分组

    我有 Person 类的自定义对象数组 Person NSObject NSString firstName NSString lastName NSString age NSMutableArray personsArray NSMuta
  • #在C中定义一个元组

    我希望能够定义一个元组来表示其他宏所需的参数 我认为展示我想要的最好方法是展示一个例子 include