c - 如何制作#define函数的for循环?
问题描述
我有#define
带有参数的函数,DEF_GLOBAL_STRUCT(index)
我需要从 1 到 100 调用这个宏。最好的方法是什么?我可以使用for
循环吗?
我制作了简单的代码来显示我的问题。
#include <stdio.h>
#include <stdint.h>
#define DEF_GLOBAL_STRUCT(index) uint8_t m_##index##_size=2; \
uint32_t m_##index##_data1=0; \
uint32_t m_##index##_data2=0;
DEF_GLOBAL_STRUCT(1)
DEF_GLOBAL_STRUCT(2)
DEF_GLOBAL_STRUCT(3)
// ...
DEF_GLOBAL_STRUCT(100)
int main()
{
printf("%u\n", m_1_size);
return 0;
}
for
我可以使用循环之类的东西来代替 100 行定义函数调用吗?或者有没有其他解决方案?
如果我拥有代码的所有控制权,我可以定义结构并用数组声明它。但我做不到。我需要使用这种类型的定义函数。那是我的局限。
解决方案
您的问题是询问您是否可以将 C 语言与预处理器指令混合使用,以使用 C 语言和预处理器指令自动生成代码。
由于预处理器和 C 编译器的工作方式,答案不在于您尝试执行此操作的方式。
预处理器是一个独立于编译的步骤。这个想法是预处理器执行 C 源代码文件的文本替换步骤以生成 C 源代码文件的新临时版本,然后由 C 编译器编译。
这是两个不同的步骤,首先预处理器完成它的工作,然后 C 编译器完成它的工作。
我的建议是编写一个简单的程序,生成一个包含您要使用的定义列表的包含文件。然后在您想要放置这些定义的地方,使用#include 指令在该点包含它。
因此,如果您有一个简单的脚本或者可能是一个 C 程序,例如:
#include <stdio.h>
int main ()
{
int i;
for (i = 1; i <= 100; i++) printf ("DEF_GLOBAL_STRUCT(%d)\n", i);
return 0;
}
然后编译它并从命令行运行它,重定向输出,如下所示:
mygen >junk.h
然后在你需要这些指令的地方:
#include <stdio.h>
#include <stdint.h>
#define DEF_GLOBAL_STRUCT(index) uint8_t m_##index##_size=2; \
uint32_t m_##index##_data1=0; \
uint32_t m_##index##_data2=0;
#include "junk.h"
int main()
{
printf("%u\n", m_1_size);
return 0;
}
推荐阅读
- java - 如何修复:当我更新实体时,休眠中的“无法提交 JDBC 连接”错误
- visual-studio-code - 如何使用键盘快捷键保存和关闭选项卡?
- python - 使用 PyOpenGL 从多个角度呈现纹理投影
- html - 获取具有相同名称的多个表单值(布尔大小写)
- html - 当我在 AMP 页面中添加地图 iframe 时显示错误
- javascript - Google 标记信息窗口中的 Lit-HTML 按钮事件
- c++ - 如何使用 Bazel 为 iOS 打包仅包含标头的 C++ 库?
- osgi - 使用 Domino Designer 10 进行 OSGI 插件开发
- javascript - 验证不会忽略字段
- swisscomdev - 尝试删除 s3 存储服务的服务密钥时失败