在 C 中将匿名结构作为参数传递

2024-03-09

我有以下 c 行(为了可读性而添加回车符 - 它们不在代码中):

#define i2c_write(slave_addr, reg_addr, len, *data_ptr)
    twi_master_write(MPU_TWI, {
        .addr = reg_addr,
        .addr_length = 1,
        .buffer = *data_ptr,
        .length = len,
        .chip = slave_addr
    })

Where twi_master_write()声明为:

uint32_t twi_master_write(Twi *p_twi, twi_packet_t *p_packet);

and twi_packet_t声明为:

typedef struct twi_packet {
    uint8_t addr[3];
    uint32_t addr_length;
    void *buffer;
    uint32_t length;
    uint8_t chip;
} twi_packet_t;

参数为twi_write()都必须是类型unsigned char.

编译时,我收到以下错误:

expected expression before '{' token

有没有正确的方法来做我在这里想做的事情,或者这是不可能的?


我的看法,在一个可编译的示例中。这是一个编译存根将无法正确运行,所以不要尝试按原样运行它!

//
// Cobbling up a compilation stub
//

#include <stdint.h>

struct Twi;
typedef struct Twi Twi;

#define MPU_TWI (Twi*)0

typedef struct twi_packet {
    uint8_t addr[3];
    uint32_t addr_length;
    void *buffer;
    uint32_t length;
    uint8_t chip;
} twi_packet_t;

uint32_t twi_master_write(Twi *p_twi, twi_packet_t *p_packet);


//
// Now for my answer :
//

#define i2c_write(slave_addr, reg_addr, len, data_ptr) \
    twi_master_write(MPU_TWI, &(twi_packet_t){         \
        .addr = reg_addr,                              \
        .addr_length = 1,                              \
        .buffer = *data_ptr,                           \
        .length = len,                                 \
        .chip = slave_addr                             \
    })

main()
{
    // Trigger that macro !
    i2c_write(0, 0, 0, (void**)0);
}

这实例化了一个复合文字并将其地址传递给函数。文字的生命周期不超过完整调用表达式的生命周期。

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

在 C 中将匿名结构作为参数传递 的相关文章

  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 如何在c++中读取pcap文件来获取数据包信息?

    我想用 C 编写一个程序来读取 pcap 文件并获取数据包的信息 例如 len sourc ip flags 等 现在我找到了如下代码 我认为它会帮助我获取信息 但是我有一些疑问 首先我想知道应该将哪个库添加到我的程序中 然后什么是 pca
  • 计算 Richtextbox 中所有单词的最有效方法是什么?

    我正在编写一个文本编辑器 需要提供实时字数统计 现在我正在使用这个扩展方法 public static int WordCount this string s s s TrimEnd if String IsNullOrEmpty s re
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 使用 C# 读取 Soap 消息

  • System.IO.FileNotFoundException:找不到网络路径。在 Windows 7 上使用 DirectoryEntry 对象时出现异常

    我正在尝试使用 DirectoryEntry 对象连接到远程 Windows 7 计算机 这是我的代码 DirectoryEntry obDirEntry new DirectoryEntry WinNT hostName hostName
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • 如何从 Chrome 中的网页抓取数据并输出到 Chrome 扩展弹出窗口中?

    对于 Google Chrome 扩展程序 我编写的用于操作扩展程序 popup html 的 DOM 的 Javascript 似乎都不会对弹出窗口的 DOM 产生任何影响 我可以使用 content script js 很好地操作浏览器
  • Prism BindableBase.SetProperty()

    我正在开发一个基于 BindableBase 的 ViewModel 该虚拟机拥有域模型的一个实例 VM公开了一个属性 比如Name 我不想使用本地存储 即VM中的存储 而是委托给模型对象的属性 我想使用 SetProperty 但存储引用
  • Android Volley 库不返回完整的响应数据

    Volley 库不返回完整的响应数据 它只返回响应数据的一部分 我正在调用 drupal 服务 下面是我的代码 public void BoardRoomRequest pdialog new ProgressDialog BoardRoo
  • jqGrid 显示用于行内编辑的“编辑”图标

    我正在使用带有内联编辑选项的 jqGrid 如果单元格没有任何值 我想显示一个编辑图标 所以我写了一个格式化程序 function aFormatter cellvalue options row if cellvalue null ret
  • 使用 JavaScript 将 div 定位在圆圈中

    我正在尝试定位15div元素均匀地分布在半径为150px 我正在使用以下代码 它似乎给出了一个重叠的奇怪的偏心椭圆 Fiddle http jsfiddle net 4qt5uaz1 3 Hold a global reference to
  • 如何从 jQuery 对象中删除元素?

    Code div d1 div div d2 div 我用过j add 添加元素到j 但是我该如何删除 d1 from j j remove 不起作用 因为它删除了 d1 and j length仍然是2 谢谢大家 div d1 div
  • 从IP地址获取地理位置[重复]

    这个问题在这里已经有答案了 可能的重复 在 Java 中获取地理位置的最佳方法 https stackoverflow com questions 1415851 best way to get geo location in java j
  • 避免 .NET Native 错误

    我去年 兼职 将现有 且成功的 Windows 8 1 应用程序迁移到 Windows 10 UWP 现在 就在将其发布到商店之前 我在 发布 构建模式 触发 NET Native 下测试了该应用程序 一切似乎都有效 直到我 偶然 注意到一
  • 嵌套 Python 模块导入的最佳实践

    假设我有一个 Python 模块 main py import math from the standard Python library import my own module foo math cos bar 我还需要在 my own
  • 如何使用 Linux 命令获取可用内存的百分比? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想使用 Linux 命令行获取以百分比形式报告的可用内存 我用的是free命令 但这只是给我数字 并且没有百分比选项 使用free命令 free t
  • ssl.get_server_certificate 适用于具有 SNI(服务器名称指示)的站点

    我正在尝试获取 badssl com 子域的服务器证书 例如https expired badssl com https expired badssl com import ssl ssl get server certificate ex
  • 如何在SML中使用IntInf或LargeInt?

    我想通过此链接中的 pow 等函数在 SML 中执行大整数计算 http www standardml org Basis int inf html IntInf STR SPEC http www standardml org Basis
  • 检测图像中线条的起点和终点(numpy 数组)

    我有一个像下面这样的图像 我想要的是获取每个线段的起点和终点的坐标 实际上我的想法是考虑这样一个事实 每个极值点应该只有一个属于其邻域中的线段的点 而所有其他点应该至少有 2 个 不幸的是 该线的厚度不等于一个像素 因此这一推理不成立 这是
  • 如何使用实体关系不直接的休眠标准连接多个表?

    我有三个实体 那些是 Entity public class Organization Id private long id Column private String name Entity public class Book Id pr
  • 活跃用户 SQL 查询

    我正在尝试绘制网络应用程序中的活跃用户图表 我的数据库由两个主表组成 user and task task has a user id 我的定义活跃用户 is 在给定结束日期后两周内创建了 2 个以上任务的用户 因此 我需要一个 SQL 查
  • 在ocaml中编写多行函数

    我无法理解如何在 ocaml 中编写函数 因为我只编写了不需要用 分隔的多行的递归函数 我正在尝试创建一个函数 给定一个整数 n 返回一个充满零且对角线上只有一个的矩阵 因此大小为 n 的单位矩阵 我是函数式编程和 ocaml 的新手 所以
  • Flutter - 在 Android 上访问隐藏方法 Lsun/misc/Unsafe 错误

    我收到 Flutter 项目的错误 我将开始一一停用插件 并希望找出其中之一是否导致了问题 在那之前 我会将其留在这里 以防有人提出建议 Accessing hidden method Lsun misc Unsafe gt putObje
  • PowerShell:带有 ConvertTo-XML 输出的自定义属性 XML 标签

    我正在 PowerShell 中创建一个新对象 使用哈希表来设置属性值 然后我想使用 ConvertTo XML 方法将对象导出为 XML 格式 hash Processor Intel Disk 500GB Server ABC Seri
  • 如何使用 opencv python 将黑色更改为红色

    你怎么能用Python做到这一点 我在这条线上遇到了问题 img rgb Set mask cv2 Scalar 0 0 255 这是代码 import numpy as np import imutils import cv2 img r
  • 在 C 中将匿名结构作为参数传递

    我有以下 c 行 为了可读性而添加回车符 它们不在代码中 define i2c write slave addr reg addr len data ptr twi master write MPU TWI addr reg addr ad