我想知道宏是否只有任何编程语言的优点。由于必须有限制,我们可以创建宏,以及使用频率。
假设我们在一个类中创建了 100 个宏,并将其导入到应用程序项目的 100 个类中。这是一个正确的方法吗?
我想知道宏是否只有任何编程语言的优点。由于必须有限制,我们可以创建宏,以及使用频率。
假设我们在一个类中创建了 100 个宏,并将其导入到应用程序项目的 100 个类中。这是一个正确的方法吗?
#define
是一个预处理器宏。您不要在类中创建宏,因为宏在使用时会在文本上进行扩展,但它的定义不是类的一部分,即使您碰巧在类中用词法编写它。
另外,您不要import
在其他类中使用类,而是import
在类声明头中。即使您多次指定导入,每个编译单元也只会发生一次。因此,每个编译单元中的每个宏最多仍然有一个声明,并且由于宏只是预处理器,它只会在编译的早期阶段出现。
您并没有确切地说出您想使用宏来做什么,因此很难说它们是否是您的最佳解决方案,或者您是否有更好的选择。但我不会担心他们的人数。标准头文件定义了数百个宏。
#define
适用于:
#include
C 和 C++ 标头,#import
ObjC 标头)UIKIT_EXTERN
),必须在预处理期间解决。NS_AVAILABLE_IOS()
)的条件编译,必须在预处理期间解决。对于其他一切,有一个替代方案可以让你一路走来头疼。
假设我们在一个类中创建了 100 个宏,并将其导入到应用程序项目的 100 个类中。这是一个正确的方法吗?
不 - 这太可怕了:)
缺点
有许多。很多时候,程序很难被人和程序(编译器、解析器、索引器)理解。这是引入错误并完全替换不相关程序的文本的好方法(通过简单的#import
. 几乎所有东西都有更现代的替代品(例如函数、内联、typedef、常量、枚举)——让编译器让你的生活更轻松!