【问题标题】:Using macro with variables in c在c中使用带有变量的宏
【发布时间】:2018-12-31 16:56:35
【问题描述】:

我有一个包含 ctype.h 的平面 C 文件,我无法弄清楚宏是如何工作的。有这个宏

#define da_dim(name, type)  type *name = NULL;          \
                            int _qy_ ## name ## _p = 0;  \
                            int _qy_ ## name ## _max = 0

我认为它应该定义给定值的类型。所以例如我可以写

int a;
da_dim(a,"char");

将其转换为字符,但它不这样做。我可以想象 '## name ##' 是/做什么(就像一个占位符),但我不明白 'qy' 是什么以及它来自哪里。那么这个宏是做什么用的,你如何使用它以及(也许)它是如何工作的?

【问题讨论】:

  • 我建议你通过预处理器运行代码,看看预处理器用什么替换了宏调用(或者尝试自己在纸上进行替换)。
  • 宏是干什么用的,你问过作者吗?或者阅读您在其中看到宏的代码的文档?
  • 最后,您对宏的示例使用是错误的,会导致构建错误。如果您扩展宏(在纸上或使用预处理器),您会明白原因。
  • 我知道错了,所以才问这个问题。

标签: c macros


【解决方案1】:

C 中的宏只是一个简单的令牌替换机制。

你的例子:

int a;
da_dim(a,"char");

将扩展为:

int a;
"char" *a = NULL;
int _qy_a_p = 0;
int _qy_a_max = 0;

因此,如果将扩展为错误,因为您将有两个 a 标识符,并且 "char" 不应该放在您放置的位置。

如果您使用gcc,您可以通过以下方式“看到”宏扩展:

$ gcc -E your_program.c

【讨论】:

  • 非常感谢我明白了:)
  • 感谢@EricPostpischil。解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多