0

我想知道宏是否只有任何编程语言的优点。由于必须有限制,我们可以创建宏,以及使用频率。

假设我们在一个类中创建了 100 个宏,并将其导入到应用程序项目的 100 个类中。这是一个正确的方法吗?

4

2 回答 2

2

#define是一个预处理器宏。您不要在类中创建宏,因为宏在使用时会在文本上进行扩展,但它的定义不是类的一部分,即使您碰巧在类中用词法编写它。

另外,您不要import在其他类中使用类,而是import在类声明头中。即使您多次指定导入,每个编译单元也只会发生一次。因此,每个编译单元中的每个宏最多仍然有一个声明,并且由于宏只是预处理器,它只会在编译的早期阶段出现。

您并没有确切地说出您想使用宏来做什么,因此很难说它们是否是您的最佳解决方案,或者您是否有更好的选择。但我不会担心他们的人数。标准头文件定义了数百个宏。

于 2012-08-21T09:38:35.920 回答
2

#define适用于:

  • 标头包括 C 和 C++ 标头的保护(成语:#includeC 和 C++ 标头,#importObjC 标头)
  • 语言兼容性的条件编译(例如UIKIT_EXTERN),必须在预处理期间解决。
  • 平台/编译器/版本特定声明(例如NS_AVAILABLE_IOS())的条件编译,必须在预处理期间解决。
  • 断言宏。指定文件、行和表达式等信息太嘈杂且容易出错。

对于其他一切,有一个替代方案可以让你一路走来头疼。

假设我们在一个类中创建了 100 个宏,并将其导入到应用程序项目的 100 个类中。这是一个正确的方法吗?

不 - 这太可怕了:)

缺点

有许多。很多时候,程序很难被人和程序(编译器、解析器、索引器)理解。这是引入错误并完全替换不相关程序的文本的好方法(通过简单的#import. 几乎所有东西都有更现代的替代品(例如函数、内联、typedef、常量、枚举)——让编译器让你的生活更轻松!

于 2012-08-21T09:12:23.383 回答