问题标签 [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.
c++ - C ++ MACROS:条件代码包含在表达式NOT语句中
好的,我知道宏是邪恶的,应该不惜一切代价避免。我正在尝试减少重要的样板代码和重复,如果我不能将其宏化,就很难不犯错字。
这是一个有些人为的例子,因为我试图将我必须的真实代码简化为一个更简洁的例子。
这将正确扩展在 BINDIF 宏中找到的 std::bind 代码。但是,请注意第一个参数,即条件,设置为 1。如果我将此值更改为 0,它会正确地下降值 nullptr。问题是我希望在评估传递给 BINDIF 宏的“方法”参数时发生这种情况。我想在表中输入 nullptr 值,因此不会生成 std::bind 代码。
我完全知道这个例子看起来是多么做作,但是在我使用的实际代码中,大多数列都包含 nullptr,因为我稀疏地绑定到 4 个 std::function 指针之一。
这是1的扩展:
这是 0 的展开式:
请原谅任何错别字和这个问题的总长度。我在过去几天在这里和其他地方搜索了答案,但找不到任何似乎有效的东西。Boost 的宏文档非常少。
大声笑,当然。带有如下 nullptr 的表:
会产生如下代码:
c - X-macro 打破了 doxygen callgraph
我有 3 个文件:
测试.c
测试2.c
测试.x
我使用 doxygen 为这些函数创建调用图。这是我的预期:
- 1级:
- 引用 level2()、level3() 和 level4()。
- 2级:
- 参考 level3() 和 level4()。
- 由 level1() 引用。
- 3级:
- 参考 level4()。
- 由 level1() 和 level2() 引用。
- 4级:
- 由 level1()、level2() 和 level3() 引用。
但这是我得到的:
- 1级:
- 引用 level2()、level3() 和 level4()。
- 2级:
- 由 level1() 引用。
- 3级:
- 由 level1() 引用。
- 4级:
- 由 level1() 引用。
似乎 test.c 上的 X-macro 是罪魁祸首。我设法通过做两件事来使它工作(要么会做):
- 重命名
test.x
所以 doxygen 找不到它。它会显示警告,但调用图是正确的。 - 在末尾添加尾随换行符
test.x
。通常文件会在X(3)
.
问题:
如何在不编辑文件的情况下从 doxygen 中获得可靠的调用图?是否有我需要更改的设置或者这是一个简单的错误?
c - x-macro 条件错误 - 数字比较
我想为所有X(a, b)
地方的 X-macro 生成编译时错误a > b
所以,产生错误X(30, 20)
这在C中可能吗?
编辑:示例用法 对我来说,左边的数字是一些大型结构的例如 sizeof,右边的数字是存储这个结构的固定空间。如果结构大于可用空间,我需要编译器生成错误。
macros - 预处理找到#define之间的最大值
我有两个头文件使用不同的值进行相同的定义:
在另一个文件中,我想定义limits.h #define MAX_NUM_OF_TREES 如何使用宏分配静态时间(预处理)的最大值?
c++ - 预处理器#include 指令和宏扩展
我有下面的代码。使用 #define LIST 指令时,doxygen 会为 Child_* 类生成文档。使用 #include 指令时,将忽略 Child_* 类的文档。
配置文件也在下面公开。
问题:我应该如何配置 doxygen 以便 #include 指令正常工作?
“List.txt”包含:
我的配置文件:
c-preprocessor - 如何减少 xmacro 表扩展中的参数数量
我一直在使用基于 xmacros 的表,如下所示:
我有比我展示的参数更多的表,但是,在许多情况下,我只将表扩展为 1 或 2。我使用它们来生成变量和枚举。例如:
有没有办法获取 TABLE_MACRO 并重新定义或更改它的扩展顺序以使其扩展为这个?
我的目标是简化表格,使用如下:
c - 使用 X 宏扩展时强制字符串和指针进入闪存
我以为我对 X-macros 理解得很好,但这真的难倒我。我定义了以下代码:
我希望字符串和指针进入闪存,但我最终得到的是 .rodata,其中指针和字符串在 C 启动代码期间被复制到 RAM。有没有办法在这里做我想做的事情(定义多个字符串并定义指向字符串的指针数组),以便它们留在闪存中并且在仍然使用 X 宏时不会复制到 RAM 中?谢谢,
c - 为 X 宏连接多个标记
我第一次尝试同时使用 X 宏和预处理器连接。
我已经阅读了很多关于 SO 与预处理器串联相关的其他问题,但我还无法理解它们或如何使这些问题适应我的用例。
项目列表是一堆 的 ID 号列表structs
,如下所示:
我可以像这样声明结构:
现在我还想将每个结构的成员之一初始化为等于 ID 号,例如foo_n.id = n;
. 通过使用以下方法,我已经能够实现第一个令牌连接:
但是我无法理解如何正确地进一步扩展这个想法,以便也替换分配的值。我试过了:
以及使用双重间接进行连接的各种尝试。但一直没有成功。上述尝试对 中的每个项目导致如下错误LIST_OF_ID_NUMS
:
我怎样才能最好地实现表格foo_n.id = n
?
c - 基于先前值的 X 宏枚举
我想用 X-Macro 生成一个枚举。枚举必须根据 prev 大小增加。
我有这个
并想生成这个
但这不起作用
这行得通,但我觉得它可以更容易
c - 带有连接参数的 X-Macro
我正在使用 X-Macro 使用以下代码创建枚举
我想更概括一下,这样 X-Macro 表只有四个参数。第一个参数是通用/基本名称,然后将其与附加参数连接。我已将宏定义如下,它试图完成刚刚显示的代码。
编译器向我提供以下错误消息:
错误:“(”标记之前的预期标识符
所以,看来我的问题出在“EXPAND_NAME(a, WA) = b”表达式上。我尝试了几种不同的方法,但到目前为止都没有。最后,理想情况下,我只想指定一次“WA”、“WB”和“WC”,而不是像这里的代码那样指定两次。
我确实找到了一个类似的问题,Concatenate multiple tokens for X macro,但如果可能的话,这不是我想做的。非常感谢对我做错的任何见解。谢谢。
编辑:更正了第一个 X-Macro 定义,因为它包含复制/粘贴错误