问题标签 [x-macros]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
111 浏览

c - force unused parameter for macro

Simple idea:

I'm using X-macros to define command list structure and declare command callbacks.

it works.

helloworld
help!


Adding some parameters:

If you change the first command list to this (by adding parameters)

then, when running it I get the following error:

I have to use all the parameters for the command list definition (command declaration):

but it's quite tricky to now use it for the callback declaration...

Is there a clever way for this X-macro to avoid this error?


I thought about the non-macro way to mask unused parameters:

which is by using (void)param;, which gives the ugly

and this does not work...I get a strange:


I think there is another way:

maybe using something like this...

但是我仍然收到以下奇怪的错误,扩展中有问题但我看不到在哪里...

也许真相在别处...... :)

任何提示?

0 投票
2 回答
83 浏览

c - 用于对齐 ENUM 和字符串的条件 X-MACRO

我有一个枚举列表:

以及要对齐的相应字符串列表:

FLAG 是一个构建标志,为 0 或 1。我正在尝试使用 X-Macros 根据此处的答案对齐这些:

这会导致一个错误,说我向 IF 宏传递的参数比声明的要多。我认为它将 X(ENUM3, "string3") 中的逗号视为 IF 的参数分隔符。我尝试用大括号封装 X() 调用并从 IF_IMPL 中删除大括号,但这也不起作用。如果我尝试使用 ... 和VA_ARGS扩展 IF() 中的参数列表,我会得到预期的表达式错误。我试图避免使用 def 文件,因为这会使我的文件不可读。像我尝试的一些解决方案对于避免代码复制和可读性来说是完美的。欢迎任何指点,谢谢!

0 投票
0 回答
46 浏览

c - 从一个 C X-Macro 生成多个列表

我有一个命令枚举列表,可以是请求类型,也可以是响应类型。

而且,我打算使用 X Macros 来生成它的 ENUM,以及名称字符串映射表,如下所示:

另外,我还需要生成两个子列表,一个req_list和一个rsp_list。有没有一种方法可以只保留一个 commands.def 文件并实现这一目标?我正在尝试以下内容:

这样的事情可能吗?提前致谢!

0 投票
1 回答
268 浏览

c - 了解 x 宏中的文本替换

下面的代码解释了 x 宏如何在 c 编程语言中以简单的方式工作

在 c 中形成宏的定义。它只是一个文本替换工具。因此编译器将按照以下方式重新创建代码:

预处理器将替换

并且它将 X(value1, 1) 替换为 char value[10]; 通过以下方式

那么第二个参数1呢,它会被替换吗?

0 投票
2 回答
145 浏览

c - 使用 X 宏的特定条目

我正在使用 X 宏来生成将 GPIO 设置为0或的函数1(我生成了大约 60 个函数来设置大约 30 个 GPIO)。这是一个例子(我刚刚写了这个例子,所以语法可能是错误的):

我生成访问这些 GPIO 的函数:

函数也存在相同的过程SetOff_GPIOXXX

SetOn_GPIOPin2有没有一种方法可以像在程序的其他部分一样访问编译器生成的函数,而无需直接编写函数名?(为了使代码尽可能全局化)

在预处理结束时,我们应该只SetOn_GPIOPin2();(而不是每个X-macro条目)从 X-Macro 生成。

预处理前:

预处理后:

0 投票
1 回答
86 浏览

c - 如何将 X 宏与函数指针数组相关联

我应用 X-macro 机制来获得枚举到字符串的关系。

然后,此函数将字符串转换为枚举。

最后,通过将枚举视为数组的索引来调用相应的函数。

这种方法有一个很大的问题是它迫使程序员记住枚举到函数的映射关系。

也就是说,在初始化阶段,以下函数的顺序

需要与 的相同CMD_TABLE

此外,一旦CMD_TABLE增长,代码的维护就会变得越来越糟糕,因为

  1. 如果命令不支持,人们可能会删除函数指针数组中的错误行。

  2. 如果我想知道做cmd_Z什么,我必须从 1 数到 26。

  3. 列表CMD_TABLEvoid (*func[])(void)将彼此远离,因此程序员需要在两个地方编写代码才能添加一个功能。

0 投票
2 回答
55 浏览

c - 如何使用 XMACRO 将宏参数值转换为字符串,而不是转换传递的参数本身

在我在社区内进行了足够的研究之后,我在这里发布了这个问题。但是,我还没有找到适合我的问题的解决方案。所以,我在这里发布我的问题。

在这里,CODE_TABLE 将从项目到项目以及此表中的元素数量进行更改。在阅读了几篇关于 Xmacros 的文章和主题后,我想在这里使用 Xmacros 概念来避免循环和大量使用 RAM 内存

0 投票
0 回答
40 浏览

c++ - 用于动态模板调用的 C++ 宏 (X- 宏)

我想做类似这个宏的事情(在图片上)。
正如你所知,你不能编写动态模板,所以我需要这样的东西,但我不擅长宏。
我怎么写这个(如果创建者for_each)

例子

0 投票
2 回答
73 浏览

c - 管理类似的结构,一个带有数组,另一个带有指针

我有一些包含数组的结构

以及它们与指针的等价物

想避免双重定义。这是我想做一些东西作为模板

这样myStruct(MaxM,MaxN)生成数组结构并myStruct(,)生成带有指针的结构。

此外,我当然想对多个结构执行相同的技术,并实现从数组到指针的自动映射。最终用例可能如下

哪里mapStruct(hugeA, smallA)是明显的映射smallA.bar = hugeA.bar等。扩展的代码将是:

如您所见,一般的想法是一些变量分配在堆栈之外,但仍然没有使用malloc,只是将它们声明为全局变量。即使在某些用例中,它们也是来自链接共享对象的外部全局变量。

编辑:关于内存性能,很难确定 malloc 结构比全局结构好还是差。它还取决于编译器的标志 -mcmodel