【问题标题】:Is there a way to check how a macro "expands" in C or Objective-C有没有办法检查宏如何在 C 或 Objective-C 中“扩展”
【发布时间】:2011-11-28 05:48:32
【问题描述】:

宏是预处理器的权利。有时我们把事情做对了,有时却没有。

偶尔展开宏看看它是如何工作的不是很好吗?

【问题讨论】:

  • 宏不是预处理器——它是一种源代码结构,由程序或称为预处理器的程序的一部分进行处理。另外,您使用的是什么版本的 Xcode?​​span>
  • Xcode 4 preprocessor output 的可能重复项

标签: objective-c xcode macros c-preprocessor


【解决方案1】:

您可以使用大多数编译器执行此操作,例如使用 gcc:

$ gcc -E

这只是运行预处理器然后停止,在标准输出上为您提供预处理输出。

如果您使用 Xcode,但您甚至不需要这样做 - 根据您使用的 Xcode 版本,您只需从 Build 菜单中选择 Preprocess(这就是它在 Xcode 中的名称) 3.x - 如果您使用的是 Xcode 4,它可能已被移动/重命名)。见:Xcode Preprocessor Output

【讨论】:

  • 不幸的是,XCode Preprocess 函数似乎只有在您的代码正确构建时才有效。这使得它对于调试未编译的宏几乎毫无用处。
  • 我刚刚在 Xcode 7.2 上尝试过,似乎编译/链接错误不会阻止您生成预处理器输出 - 我希望它只是预处理器错误(不足为奇)会导致问题?跨度>
  • 你是对的。有区别是有道理的,我只是将它们捆绑在一起成为“构建错误”,这还不够具体。我希望通过查看预处理器输出来了解为什么我的预处理器定义搞砸了,但是因为我有一个错误,除了错误说明之外我什么也看不到宏“无法展开”。
  • 是的,我认为当您在预处理器级别遇到问题时,您必须诉诸“分而治之”的方法来隔离问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多